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 生命周期架构组件使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
相关文章
Android画图实现MPAndroidchart折线图示例详解
这篇文章主要为大家介绍了Android画图实现MPAndroidchart折线图示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-07-07Android使用自定义view在指定时间内匀速画一条直线的实例代码
这篇文章主要介绍了Android使用自定义view在指定时间内匀速画一条直线的实例代码,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-05-05react native中的聊天气泡及timer封装成的发送验证码倒计时
这篇文章主要介绍了react native中的聊天气泡及timer封装成的发送验证码倒计时的相关资料,需要的朋友可以参考下2017-08-08Android中ViewPager带来的滑动卡顿问题解决要点解析
这里我们主要针对ViewGroup的SwipeRefreshLayout中引入ViewPager所引起的滑动冲突问题进行讨论,一起来看一下Android中ViewPager带来的滑动卡顿问题解决要点解析:2016-06-06
最新评论