ViewModel

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更新

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容