ViewModel的基本使用方法,這里不再講解
ViewModel優點
- 可以在屏幕旋轉之后,仍然保持之前的狀態,這樣就不用刻意去處理屏幕旋轉事件
- 可以輕松實現作用域內的單例模式
- 可以輕松在作用域內進行數據共享
ViewMode使用注意
- 不能將Activity作為Context傳給ViewModel
- 因為ViewModel中會處理耗時工作,可能會在Activity.Destroy之后繼續持有Activity,導致內存泄漏
- 如果ViewModel需要獲取資源,建議使用Application作為Context
- 有兩種方式可以獲取Application,一種是保存Application的單例對象,一種是通過ViewModelProvider去自動創建
通過ViewModelProvider自動創建帶Context的ViewModel
由于Application是單例的,ViewModelProvider可以實現自動組裝
class ContextViewModel(application: Application) : AndroidViewModel(application)val viewModel = ViewModelProvider(this)[ContextViewModel::class.java]
val context = viewModel.getApplication<Application>()