jetpack-lifecycle原理解析

定义

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.PNG

3.通过空白fragment的生命周期函数,来分发lifecycle的事件(onActivityCreate 对应分发 lifecycle的on_create事件)dispatch(Lifecycle.event.on_start)

jetpack-lifecycle-555.png

4.最后调用lifecycle的HandelLifecycleEvent(event)

jetpack-lifecycle-222.png

5.在LifecycleRegistry的handleLifecycleEvent(event)方法中,主要执行三个操作,先判断调用的方法是否在主线程中,否则抛出异常,然后根据event 事件,来得到对应的status状态,最后进行状态对齐。

jetpack-lifecycle-333.png
jetpack-lifecycle-666.png

6.在进行状态对齐的时候,分为前进过程或者倒退流程两种,更新了状态之后,再根据状态得到事件,然后再次分发

jetpack-lifecycle-101.png
jetpack-lifecycle-102.png
jetpack-lifecycle-888.png

Lifecycle 维护状态mState,主要是为了LiveData 等组件库使用,通过mState判断 mActive状态,是否处于激活状态,以此决定是否要进行数据分发。

jetpack-lifecycle-999.png

7.在被观察者中通过 Lifecycle.addOberver(LifecycleObserver) 绑定观察者的时候,就是把观察者存储map中,为了后面事件分发的时候 ,通过反射调用观察者的相应方法。

jetpack-lifecycle-777.png

8.通过ObserverWithState 分发事件,调用LifecycleEventObserver(这是个接口) 的onStateChanged(lifecycleOwner,event)方法,在实现类ReflecttiveGenericLifecycleOberver 通过反射,调用观察者 对应的方法

jetpack-lifecycle-100.png
2b038809c8a3bcc9ed3ca0100ee1d30.png

你可能感兴趣的:(jetpack-lifecycle原理解析)