欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 生命周期架構(gòu)組件使用方法

 更新時(shí)間:2018年02月10日 11:51:02   作者:非非白  
這篇文章主要介紹了 Android 生命周期架構(gòu)組件的使用方法,需要的朋友可以參考下

Support Library 26.1+ 直接支持生命周期架構(gòu)組件。使用該組件,Android 生命周期的夢(mèng)魘已經(jīng)成為過(guò)去。再也不用擔(dān)心出現(xiàn) Can not perform this action after onSaveInstanceState 這樣的異常了。

筆者封裝了一個(gè)簡(jiǎn)化使用該組件的輔助類(lèi),大約 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);

然后在適當(dāng)?shù)臅r(shí)機(jī)調(diào)用 lifecycleDelegate.scheduleTaskAtStarted

該輔助類(lèi)會(huì)檢查是否在主線程調(diào)用,以確保線程安全以及在主線程更新 UI。

總結(jié)

以上所述是小編給大家介紹的Android 生命周期架構(gòu)組件使用方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論