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 反射調用的相關類。
 
系列文章列表:
 
 
最後,再次感謝幾位大神的經驗分享:
相關文章
相關標籤/搜索