Android Jetpack 是一个为开发人员提供一系列库的套件,用于帮助开发者更轻松地构建高质量的 Android 应用。这些库包含了许多常见的应用开发任务所需的组件和工具,其中之一是 Lifecycle 组件。Lifecycle 组件是 Android Jetpack 中的一部分,它提供了有关 Android 组件(如 Activity 和 Fragment)生命周期的信息,并允许开发者编写更加简洁和健壮的代码。
在本文中,我们将详细介绍 Lifecycle 组件中的 ViewModel,并使用 androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0 这个库中提供的 ViewModel-KTX 扩展库进行开发。我们还将讨论 Lifecycle 2.x 版本中的 ViewModel,并对比两者的差异。
Lifecycle ViewModel-KTX 的简介
ViewModel 是一个存储 UI 相关数据的类,它在配置更改时保持数据的连续性,并且可以被多个组件共享。ViewModel-KTX 是 Lifecycle 组件中的一个扩展库,旨在提供更简洁、更易用的 ViewModel 开发体验。
首先,我们需要在项目的 build.gradle 文件中添加以下依赖项:
dependencies {
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
}
接下来,让我们看一下如何使用 ViewModel-KTX 来创建和使用 ViewModel。
创建 ViewModel
在使用 ViewModel-KTX 之前,我们需要确保我们的 Activity 或 Fragment 继承自 ViewModelStoreOwner,以便能够持有和管理 ViewModel。
class MyActivity : AppCompatActivity(), ViewModelStoreOwner {
private val viewModel: MyViewModel by viewModels()
// ...
}
在上面的代码中,我们通过 viewModels() 扩展函数创建了一个名称为 viewModel 的 ViewModel。注意到我们不需要手动实例化 ViewModel,ViewModel-KTX 会自动为我们处理这个过程。
使用 ViewModel
ViewModel 的主要目的是存储和管理与 UI 相关的数据。我们可以通过在 ViewModel 类中声明属性来实现这一点,并通过在 Activity 或 Fragment 中访问 ViewModel 实例来访问这些属性。
class MyViewModel : ViewModel() {
private val _data = MutableLiveData<String>()
val data: LiveData<String> get() = _data
fun fetchData() {
// 模拟从网络或数据库获取数据的过程
// ...
_data.value = "Hello, World!"
}
}
在上面的代码中,我们声明了一个 data 属性,它是一个 LiveData<String> 类型的属性。我们还定义了一个 fetchData() 方法,用于模拟从网络或数据库获取数据的过程,并将结果存储在 _data 中。
在 Activity 或 Fragment 中,我们可以通过访问 ViewModel 实例来观察 data 属性的变化,并在数据变化时更新 UI。
class MyActivity : AppCompatActivity(), ViewModelStoreOwner {
private val viewModel: MyViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 观察 data 属性的变化
viewModel.data.observe(this, Observer { data ->
// 在数据变化时更新 UI
updateUI(data)
})
}
private fun updateUI(data: String) {
// 更新 UI
// ...
}
// ...
}
在上面的代码中,我们通过 observe() 方法将 Activity 或 Fragment 与 data 属性进行绑定,并在数据变化时调用 updateUI() 方法更新 UI。
Lifecycle 2.x 中的 ViewModel
除了 ViewModel-KTX,Lifecycle 组件还提供了 Lifecycle 2.x 版本中的 ViewModel。Lifecycle 2.x 版本的 ViewModel 相对于 ViewModel-KTX 的主要区别在于创建和使用 ViewModel 的方式。
要使用 Lifecycle 2.x 版本的 ViewModel,我们需要在项目的 build.gradle 文件中添加以下依赖项:
dependencies {
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.2.0'
}
然后,我们可以通过 ViewModelProviders 类来创建和使用 ViewModel。
首先,我们需要在 Activity 或 Fragment 中获取一个 ViewModelStore 实例:
class MyActivity : AppCompatActivity() {
private val viewModelStore: ViewModelStore by lazy { ViewModelStore() }
// ...
}
接下来,我们可以通过 ViewModelProviders 类来创建和访
















