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>()