首页 > 系统 > Android > 正文

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

2019-10-22 18:15:14
字体:
来源:转载
供稿:网友

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


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表