返回

Jetpack AAC 完整解析:ViewModel,数据与界面的分离高手

Android

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 应用程序。