国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 生命周期架構組件使用方法

2019-12-12 01:09:59
字體:
來源:轉載
供稿:網友

Support Library 26.1+ 直接支持生命周期架構組件。使用該組件,Android 生命周期的夢魘已經成為過去。再也不用擔心出現 Can not perform this action after onSaveInstanceState 這樣的異常了。

筆者封裝了一個簡化使用該組件的輔助類,大約 70 行代碼:

public class LifecycleDelegate implements LifecycleObserver {  private LinkedList<Runnable> tasks = new LinkedList<>();  private final LifecycleOwner lifecycleOwner;  public LifecycleDelegate(LifecycleOwner lifecycleOwner) {    this.lifecycleOwner = lifecycleOwner;    lifecycleOwner.getLifecycle().addObserver(this);  }  public void scheduleTaskAtStarted(Runnable runnable) {    if (getLifecycle().getCurrentState() != Lifecycle.State.DESTROYED) {      assertMainThread();      tasks.add(runnable);      considerExecute();    }  }  @OnLifecycleEvent(Lifecycle.Event.ON_ANY)  void onStateChange() {    if (getLifecycle().getCurrentState() == Lifecycle.State.DESTROYED) {      tasks.clear();      getLifecycle().removeObserver(this);    } else {      considerExecute();    }  }  void considerExecute() {    if (isAtLeastStarted()) {      for (Runnable task : tasks) {        task.run();      }      tasks.clear();    }  }  boolean isAtLeastStarted() {    return getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED);  }  private Lifecycle getLifecycle() {    return lifecycleOwner.getLifecycle();  }  private void assertMainThread() {    if (!isMainThread()) {      throw new IllegalStateException("you should perform the task at main thread.");    }  }  static boolean isMainThread() {    return Looper.getMainLooper().getThread() == Thread.currentThread();  }}

在 Activity 或 Fragment 中這樣使用

private LifecycleDelegate lifecycleDelegate = new LifecycleDelegate(this);

然后在適當的時機調用 lifecycleDelegate.scheduleTaskAtStarted

該輔助類會檢查是否在主線程調用,以確保線程安全以及在主線程更新 UI。

總結

以上所述是小編給大家介紹的Android 生命周期架構組件使用方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苏尼特右旗| 邵阳县| 锦屏县| 新龙县| 奇台县| 西乡县| 尚义县| 建瓯市| 左贡县| 玛沁县| 永修县| 奇台县| 门头沟区| 麦盖提县| 化隆| 常州市| 金堂县| 犍为县| 广昌县| 卢氏县| 兰西县| 吉水县| 莱阳市| 卢氏县| 崇礼县| 南皮县| 平遥县| 蒙阴县| 尼木县| 阳城县| 青冈县| 祁东县| 买车| 大厂| 广东省| 潜山县| 兴海县| 西和县| 东源县| 和田市| 聂拉木县|