Android Architecture Components 系列(八)小结

梳理一下各个部分的流程:
 
  1. 因为上面的案例是在onCreate中订阅的,那么最开始先执行的应该是addObserver,这个时候会把LifecycleRegistry的mState(下文简称RS)置为INITIALIZED。并向observerMap中添加封装过的ObserverWithState,其中的mState(下文简称OS)为INITIALIZED。不执行同步方法。
  2. Activity启动,传递过来第一个生命周期事件ON_CREATE,经过getStateAfter计算以后的State为CREATED赋值给RS,判断状态决定执行正推计算,OS的当前值为INITIALIZED,更改LifecycleBoundObserver的active(下文简称active)值为false。OS修改成CREATED。
  3. 事件ON_START,RS为STARTED,正推计算,OS当前值为CREATED,更改active为true。OS修改成STARTED。
  4. 事件ON_RESUME,RS为RESUMED,正推计算,OS当前值为STARTED,更改active为true。OS修改成RESUMED。
  5. 事件ON_PAUSE,RS为STARTED,反推计算,OS当前值为STARTED,更改active为true。OS修改成STARTED。
  6. 事件ON_STOP,RS为CREATED,反推计算,OS当前值为CREATED,更改active为false。OS修改成CREATED。
  7. 事件ON_DESTROY,RS为DESTROYED,反推计算,OS当前值为DESTROYED,更改active为false。OS修改成DESTROYED。
总体事件流程就是这样,经过感知Activity/Fragment的生命周期,而后分发到LifecycleRegistry中进行处理,根据当前的状态来修改保存的ObserverWithState的mState,而后修改LifecycleBoundObserver的active决定数据是否能够更新。
上面的状态都是做者根据最开始的案例断点调试得出的结论,值得注意的就是由于有Application也就是ProcessLifecycleOwner的干扰,调试的时候要区分好LifeRegistry,第二个注意的就是mState的值,由于有两个mState,常常会须要进行比较,来决定同步。

总结

至此,整个Android Architecture Components架构中全部的源码都过了一遍了, 主要的难点就是在handleLifecycleEvent()和Sync()两个方法。整体的分析下整个架构:
我的认为主要分为三个部分:
第一部分:生命周期的感知包括系统生命周期的感知。其中有使用的类和技巧有,经过注册ContenProvider进行项目的初始化,经过添加Fragment来获取宿主的生命周期。经过给Application和Activity添加生命周期的回调,来进行Fragment的初始化和生命周期的感知。
相关的类包括:
LifecycleRuntimeTrojanProvider 用于进行初始化init操做、
LifecycleDispatcher 用于进行生命周期分发处理、
ProcessLifecycleOwner 应用生命周期控制,、
ReportFragment 添加的Fragment 用于感知宿主生命周期。
第二部分:ViewModel生命周期的控制。一样使用了添加Fragment来感知宿主的生命周期,经过一个HoldFragment来持有一个ViewModelStore保存当前宿主的全部ViewModel,经过工厂模式反射得到ViewModel对象。
相关的类包括:
ViewModel、
ViewModelProvider ViewModel的提供者、
ViewModelStore 用于保存ViewModel、
HolderFragment 添加的Fragment 用于感知宿主生命周期等。
第三部分:LiveData和LifecycleRegistry的协同操做。这里使用了两个枚举对象来归纳总体的生命周期,经过Event的传递来改变当前的Lifecycyle的状态,同时更新当前的Observer是否处于活动状态。我的认为整个项目中的关于Observer的三个封装类是整个项目的骨架,State和Event就是流动血液,而HandleLifecycleEvent和Sync两个方法就是整个项目的灵魂。
相关的类包括:
LiveData 数据模型、
LifecycleOwner 生命周期持有者、
LifecycleRegistry 用于控制生命周期、
ObserverWithState 保存Observer和对应的状态、
LifecycleBoundObserver 保存Observer和LifecycleOwner、
ReflectiveGenericLifecycleObserver 反射调用的相关类。
 
系列文章列表:
 
 
最后,再次感谢几位大神的经验分享:
相关文章
相关标签/搜索