1.ViewModel的初始化
根据架构图,ViewModel的重要性不言而喻。
注意: ViewModel 通常不应引用视图、Lifecycle 或可能存储对 activity 上下文的引用的任何类。由于 ViewModel 的生命周期大于界面的生命周期,因此在 ViewModel 中保留与生命周期相关的 API 可能会导致内存泄漏。
1.1 利用ViewModelFactory初始化
val viewModel =
ViewModelProvider.AndroidViewModelFactory.getInstance(this)
.create(EolViewModel::class.java)
1.2 利用ViewModelProvider初始化
val viewModel = ViewModelProvider(this).get(EolViewModel::class.java)
1.3 利用系统提供KTX工具来初始化
这里需要注意一下:
fragment-ktx 和activity-ktx的版本居然不一致
当需要使用 AndroidKTX扩展程序时,最好去 官方 - KTX 扩展程序列表 查询一下。
/** Use the 'by viewModels()' Kotlin property delegate
* from the activity-ktx artifact
*/
val viewModel: EolViewModel by viewModels()
2. 借助于Hilt 注入 ViewModel
使用Android中的依赖注入(DI)注入ViewModel和普通对象相比,比较特殊,所以这里重点介绍一下:
- 使用 @HiltViewModel 注释 具体的ViewModel类
- 给构造函数加上 @Inject
- 注入的地方不能用@Inject,而是和常规使用ViewModel一样,使用上面的3种方式之一去初始化ViewModel。
注意这里不能使用@Inject去注入ViewModel,否则获取到的ViewModel只是一个普通对象,它在Activity销毁的时候也会被回收,而无法做到如ViewModel那样的在配置改变的时候依旧保存下来。
关于更多关于ViewModel的内容,请访问