ViewModel生命周期
LiveData,ViewModel,Lifecycle原理解析以及使用 - 簡書 (jianshu.com)
具體源碼分析推薦可以閱讀這篇文章,基本原理是在Activity上add一個setRetainInstance(true)的HolderFragment,由其保存對應Activity的ViewModelStore,
在Activity重走生命周期后,在onCreate()中再次通過ViewModelProviders.of(this)找到對應的HolderFragment的ViewModelStore,并通過get(xxxViewModel.class)以class為key,找到存在ViewModelStore中的ViewModel。
(故在Fragment之間可以通過ViewModelProviders.of(getActivity()).get(xxxViewModel.class)來獲取到相同的ViewModel,從而實現Fragment之間的ViewModel共享
LiveData
LiveData的功能在于,在于setValue時(非UI線程使用postValue),會根據當前界面的生命周期(通過在界面上add一個無界面的ReportFragment,接收其生命周期回調來實現,很經典的做法,Glide比起其他的圖片加載庫有感知生命周期的功能也是這么做的),選擇要不要回調到UI界面更新(在對應的Activity調用onStart()之前,onStop()之后,都是不會更新界面的),那么如果遇到這些情況,LiveData會選擇在每一次對應界面的生命周期變化時,以及調用LiveData.observe()建立監聽關系時再去嘗試回調UI更新