返回
Jetpack AAC 完整解析:ViewModel,数据与界面的分离高手
Android
2024-02-28 07:19:56
Jetpack AAC 完整解析 (3) —— ViewModel
ViewModel 是 Jetpack AAC 中一个至关重要的组件,同时也是一个同名抽象类。ViewModel(视图模型)顾名思义,就是为界面准备数据的模型。
ViewModel 的作用
ViewModel 的主要作用是:
- 数据分离: 将数据与界面逻辑分离,让界面逻辑更加清晰易维护。
- 生命周期管理: ViewModel 会自动管理其生命周期,确保数据在界面生命周期内始终可用。
- 状态保存: ViewModel 可以在界面配置更改时保存和恢复其状态,从而避免数据丢失。
ViewModel 的使用场景
ViewModel 适用于以下场景:
- 在多个 Activity 或 Fragment 中共享数据。
- 避免在 Activity 或 Fragment 中直接持有大量数据。
- 确保数据在界面生命周期内始终可用。
- 跨配置更改(例如屏幕旋转)保存数据。
创建 ViewModel
ViewModel 可以通过以下方式创建:
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
其中 MyViewModel
是要创建的 ViewModel 类。
获取 ViewModel
在其他地方获取 ViewModel 时,需要指定 ViewModel 的作用域。例如,在 Fragment 中获取 ViewModel 的作用域是 Fragment 本身:
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
而在 Activity 中获取 ViewModel 的作用域是 Activity 本身:
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
ViewModel 的生命周期
ViewModel 的生命周期与界面组件的生命周期无关。ViewModel 会在应用程序生命周期内一直存在,除非显式销毁它。
销毁 ViewModel
当不再需要 ViewModel 时,可以显式销毁它。例如,在 Activity 或 Fragment 的 onDestroy()
方法中:
override fun onDestroy() {
super.onDestroy()
viewModelStore.clear()
}
总结
ViewModel 是 Jetpack AAC 中一个强大的组件,它可以帮助开发者分离数据和界面逻辑、管理生命周期和状态。通过使用 ViewModel,开发者可以创建更清晰、更易维护的 Android 应用程序。