Android

关注公众号 jb51net

关闭
首页 > 软件编程 > Android > Android 生命周期架构组件

Android 生命周期架构组件使用方法

作者:非非白

这篇文章主要介绍了 Android 生命周期架构组件的使用方法,需要的朋友可以参考下

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 生命周期架构组件使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:
阅读全文