LifeCycle详解

藏宝库编辑 2024-10-7 11:37:21 111 0 来自 中国
LifeCycle的由来


解耦是为相识决传统开辟某块痴肥,以到达代码量均衡、优雅、易扩展。由于Android大部门开辟必要感知组件的生命周期,在对应生命周期中做对应的工作,故原始的做法就是在Activity、Fragment、Service等生命周期回调中增长相应的处理代码,如许导致Activity等组件非常痴肥、难以做扩展。LifeCycle的出现就是在表面实现对这些组件生命周期的感知能力,镌汰组件中的代码量。
LifeCycle的利用


在Activity、Fragment中的利用

简单新建一个生命周期感知监听器,如下图,该类必要实现LifecycleObserver接口
1.png 起首在Activity中利用该接口,利用非常简单,只要两行代码就够了
2.png 下面就是见证古迹的时间,如许解耦就完成了
3.png 在Fragment里面实现也非常简单,只用在Fragment里面做Activity同样的工作
4.png 在Service中的利用

service中利用非常简单,纯了添加LifeCycleExampleListener监听器外,Service必要继承LifecycleService
5.png Application中的利用

application中利用非常简单,不外LifeCycleExampleListener是添加到全局的ProcessLifecycleOwner里面,如许就可以很方便的感知应用进程在前台照旧配景了
6.png LifeCycle原理


现以Application为例,实在里面全部的原理都是一样,ProcessLifecycleOwner.get().getLifecycle().addObserver终极实现类为LifecycleRegistry,addObserver方法如下
new ObserverWithState(observer, initialState)->Lifecycling.lifecycleEventObserver(observer),如下图所示,实在就是根据差别Observer的实现方式做适配,当为图1注解时,会动态天生对应的回调方法
背面最告急的是生命周期状态改变变乱的分发statefulObserver.dispatchEvent(lifecycleOwner, upEvent(statefulObserver.mState)),如许就实现了初始状态的监听,那Application生命周期改变是怎样关照这些观察者的呢?重要的实如今ProcessLifecycleOwner类,此中生命周期感应在attachapp.registerActivityLifecycleCallbacks(接口中感应,当有activity启动时实行activityStarted->mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)->moveToState(next)->sync()
sync()代码如下,颠末backwardPass大概forwardPass将生命周期变乱通报给观测者,两个方法里面都是通过observer.dispatchEvent(l)实现
10.png 如许,LifeCycle就实现了动态感知生命周期,且不会造成内存走漏,由于LifecycleRegistry都是弱引用LifecycleRegistry(包罗Activity、Fragment、Service等)
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-23 16:20, Processed in 0.162806 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表