1. LiveData
LifecycleBoundObserver
持有调用LiveData
的observe()
方法的LifecycleOwner
和Observer
实例。并对该LifecycleOwner
进行监听。当LifecycleOwner
的生命周期发生变化时,获取LifecycleOwner
最新的状态并更新自身的activeState
。
setData
主线程调用,mVersion++
并将新值赋给mData
。遍历维护的mObservers
,根据每个LifecycleBoundObserver
的activeState
调用或不调用实际Observer的onChanged()
方法。
postData
在任意线程调用,会在主线程进行实际的setValue()
操作。
2. ViewModel
ViewModelProviders
获取
AndroidViewModelFactory
单例从
ViewModelStores
中获取当前Activity/Fragment
对应的ViewModelStore
创建持有
AndroidViewModelFactory
和ViewModelStore
的ViewModelProvider
实例
ViewModelProvider
通过get(@NonNull Class<T> modelClass)
方法从ViewModelStore
中获取ViewModel
实例,如果ViewModelStore
的mMap
中已经存在当前ViewModel的实例,则直接返回,否则通过AndroidViewModelFactory
创建一个新实例返回并存储在mMap
中。
ViewModelStores
在当前Activity/Fragment
中查找指定TAG的HolderFragment
,若有则直接返回该HolderFragment持有的ViewModelStore
实例,否则调用HolderFragmentManager
的createHolderFragment()
方法创建HolderFragment
实例并添加到当前Activity/Fragment
中,并且放入HolderFragmentManager
维护的Map
中。
HolderFragmentManager
中有一个ActivityLifecycleCallbacks
实例,用于监听Activity的onDestroy
状态。当Activity
被销毁时,会移除其内部的HolderFragment
。在HolderFragment
被销毁时,会遍历所持有的ViewModelStore
中维护的ViewModel
的mMap
,执行每个ViewModel
的onCleared()
方法,再从mMap
中进行移除。
ViewModelStoreOwner
HolderFragment
HolderFragment
实现了ViewModelStoreOwner
接口,getViewModelStore()
方法用于返回内部的ViewModelStore
实例。