ViewModelProvider
是 Android Jetpack 中的一个类,用于创建和管理 ViewModel 实例。它有助于在配置更改(如屏幕旋转)时保持数据并避免内存泄漏。以下是如何有效使用 ViewModelProvider
的步骤:
- 首先,确保在项目的 build.gradle 文件中添加了 Jetpack 依赖项:
dependencies { def lifecycle_version = "2.4.1" implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" }
- 创建一个 ViewModel 类,该类继承自
AndroidViewModel
。在这个类中,你可以定义数据和业务逻辑:
import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch class MyViewModel : AndroidViewModel { private val _data = https://www.yisu.com/ask/MutableLiveData() val data: LiveData get() = _data fun fetchData() { viewModelScope.launch { // 获取数据的异步操作 val result = withContext(Dispatchers.IO) { // 模拟网络请求或其他耗时操作 "Hello, World!" } _data.postValue(result) } } }
- 在 Activity 或 Fragment 中,使用
ViewModelProvider
创建 ViewModel 实例:
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
// 观察数据变化
viewModel.data.observe(this, Observer { result ->
// 更新 UI
println("Data: $result")
})
// 获取数据
viewModel.fetchData()
}
}
注意:在 Activity 或 Fragment 中,ViewModelProvider 会自动处理生命周期问题。当 Activity 或 Fragment 被销毁时,ViewModel 会被自动清除。
通过遵循这些步骤,你可以有效地使用 ViewModelProvider
来管理 ViewModel 实例并在配置更改时保持数据。