Android 生命周期架构组件使用方法
2018-02-10 11:51
507 查看
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的桌面组件App Widget的使用方法 AppWidgetProvider RemoteViews
- .Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码]
- android RadioButton和CheckBox组件的使用方法
- Android下拉刷新组件Android PullToRefresh使用方法
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- 如何在cocos2d-x中使用ECS(实体-组件-系统)架构方法开发一个游戏?
- Android组件之Service学习(1)两种使用方式与生命周期
- 【Android应用开发技术:应用组件】Intent使用方法
- Android使用原生组件WebView加载网页和数据的方法
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- Android 四大组件之Service 的生命周期和使用
- 说说Android 两种为自定义组件添加属性的使用方法和区别 推荐
- Android 两种为自定义组件添加属性的使用方法和区别
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- android使用include调用内部组件的方法
- Android重要组件使用方法汇总