1. LiveData
LifecycleBoundObserver
持有調(diào)用LiveData
的observe()
方法的LifecycleOwner
和Observer
實(shí)例耕拷。并對(duì)該LifecycleOwner
進(jìn)行監(jiān)聽(tīng)眶诈。當(dāng)LifecycleOwner
的生命周期發(fā)生變化時(shí)揭厚,獲取LifecycleOwner
最新的狀態(tài)并更新自身的activeState
。
setData
主線程調(diào)用怜瞒,mVersion++
并將新值賦給mData
糟需。遍歷維護(hù)的mObservers
忘晤,根據(jù)每個(gè)LifecycleBoundObserver
的activeState
調(diào)用或不調(diào)用實(shí)際Observer的onChanged()
方法旅赢。
postData
在任意線程調(diào)用齿桃,會(huì)在主線程進(jìn)行實(shí)際的setValue()
操作惑惶。
2. ViewModel
ViewModelProviders
獲取
AndroidViewModelFactory
單例從
ViewModelStores
中獲取當(dāng)前Activity/Fragment
對(duì)應(yīng)的ViewModelStore
創(chuàng)建持有
AndroidViewModelFactory
和ViewModelStore
的ViewModelProvider
實(shí)例
ViewModelProvider
通過(guò)get(@NonNull Class<T> modelClass)
方法從ViewModelStore
中獲取ViewModel
實(shí)例,如果ViewModelStore
的mMap
中已經(jīng)存在當(dāng)前ViewModel的實(shí)例源譬,則直接返回集惋,否則通過(guò)AndroidViewModelFactory
創(chuàng)建一個(gè)新實(shí)例返回并存儲(chǔ)在mMap
中。
ViewModelStores
在當(dāng)前Activity/Fragment
中查找指定TAG的HolderFragment
踩娘,若有則直接返回該HolderFragment持有的ViewModelStore
實(shí)例,否則調(diào)用HolderFragmentManager
的createHolderFragment()
方法創(chuàng)建HolderFragment
實(shí)例并添加到當(dāng)前Activity/Fragment
中喉祭,并且放入HolderFragmentManager
維護(hù)的Map
中养渴。
HolderFragmentManager
中有一個(gè)ActivityLifecycleCallbacks
實(shí)例,用于監(jiān)聽(tīng)Activity的onDestroy
狀態(tài)泛烙。當(dāng)Activity
被銷(xiāo)毀時(shí)理卑,會(huì)移除其內(nèi)部的HolderFragment
。在HolderFragment
被銷(xiāo)毀時(shí)蔽氨,會(huì)遍歷所持有的ViewModelStore
中維護(hù)的ViewModel
的mMap
藐唠,執(zhí)行每個(gè)ViewModel
的onCleared()
方法,再?gòu)?code>mMap中進(jìn)行移除鹉究。
ViewModelStoreOwner
HolderFragment
HolderFragment
實(shí)現(xiàn)了ViewModelStoreOwner
接口宇立,getViewModelStore()
方法用于返回內(nèi)部的ViewModelStore
實(shí)例。