官方學習文檔
ViewModel就是存儲頁面相關的數據,並將這些數據和Activity、Fragment等有生命周期相關的組件相關聯,賦予數據生命周期。
特點:
ViewModel的生命周期
在viewModel對象創建時開始,壹直到他所關聯的界面控制器銷毀時才銷毀,這就說明了即使發生了橫豎屏切換,界面相關的數據也是壹直存在並且不受橫豎屏切換的影響。
通常我們是在Actvity的onCreate()方法中來創建ViewModel對象,該ViewModel對象會壹直在內存中,直到這個Activity銷毀時才釋放資源。
從上面ViewModel的工作原理可以得知:
1、ViewModel 壹旦創建好了,就會壹直保存到當前界面控制器(Activity 、Fragment等)銷毀時才會釋放資源;
2、不同的界面控制器,ViewModel 的對象時存在不同的Hashmap中的,他們也是不同的對象;局部單例;
3、要做到全局單例ViewModel對象,可以將ViewModel放到Application中去;
接下來從源碼角度來分析壹下原理:
在構建Activity的對象時,在其父類ComponentActivity.java中實現了接口ViewModelStoreOwner,在其實現方法中生成ViewModelStore對象
在界面控制器的構造函數中,就添加了對生命周期的觀察者,而當觀察者收到當前的界面控制器的生命周期是Lifecycle.Event.ON_DESTROY時,就會將mViewModelStore對象map中所有保存的viewModel清理掉,這樣來達到釋放資源。
這裏只處理了ON_DESTROY的生命周期狀態,那麽也就說明了在ViewModel對象實例創建成功後,不管界面控制器(如Activity)的生命周期(除ON_DESTROY外)如何發生變化,ViewModel都不會被清理掉。
從這裏看出來ViewModel對應key的唯壹性
ViewModel工作原理的核心技術點:
觀察者模式、工程模式、反射、Hashmap數據結構
ViewModel在MVVM架構模型中,與DataBinding結合使用,會讓妳有起飛的感覺。後續會進壹步加深使用。本篇僅以學會使用、了解原理為重點。