定义
lifecycle就是对activity和fragment生命周期进行监控。一般不会独立使用,都是配合livedata 和viewmodel使用。避免内存泄漏
jetpack-lifecycle定义.PNG
jetpack-lifecycle结构图.PNG
总结原理流程
1.在Androidx 之后,componentActivity 默认实现LifeCycleOwner接口,实现getLifecycle()方法,返回LifecycleRegistry(Lifecycle是抽象类,继承lifecycle)实例对象,把本身this作为构造参数,传给lifecycleRegistry。
2.在onCreate方法中,通过ReportFragment.inectIfNeedIn(this),创建空白fragment,添加到activity,用以监听activity的生命周期
jetpack-lifecycle-空白fragment.PNG jetpack-lifecycle-inject.PNG3.通过空白fragment的生命周期函数,来分发lifecycle的事件(onActivityCreate 对应分发 lifecycle的on_create事件)dispatch(Lifecycle.event.on_start)
jetpack-lifecycle-555.png4.最后调用lifecycle的HandelLifecycleEvent(event)
jetpack-lifecycle-222.png5.在LifecycleRegistry的handleLifecycleEvent(event)方法中,主要执行三个操作,先判断调用的方法是否在主线程中,否则抛出异常,然后根据event 事件,来得到对应的status状态,最后进行状态对齐。
jetpack-lifecycle-333.png jetpack-lifecycle-666.png6.在进行状态对齐的时候,分为前进过程或者倒退流程两种,更新了状态之后,再根据状态得到事件,然后再次分发
jetpack-lifecycle-101.png jetpack-lifecycle-102.png jetpack-lifecycle-888.pngLifecycle 维护状态mState,主要是为了LiveData 等组件库使用,通过mState判断 mActive状态,是否处于激活状态,以此决定是否要进行数据分发。
jetpack-lifecycle-999.png7.在被观察者中通过 Lifecycle.addOberver(LifecycleObserver) 绑定观察者的时候,就是把观察者存储map中,为了后面事件分发的时候 ,通过反射调用观察者的相应方法。
jetpack-lifecycle-777.png8.通过ObserverWithState 分发事件,调用LifecycleEventObserver(这是个接口) 的onStateChanged(lifecycleOwner,event)方法,在实现类ReflecttiveGenericLifecycleOberver 通过反射,调用观察者 对应的方法
jetpack-lifecycle-100.png 2b038809c8a3bcc9ed3ca0100ee1d30.png
网友评论