📅  最后修改于: 2023-12-03 14:59:15.967000             🧑  作者: Mango
在 Android 应用程序中,ViewModel 通常用于保存应用程序的状态,并且可以通过 ViewModel Survive 配合 Bundle 或 SavedStateRegistry 来保存/恢复此状态。
在 ViewModel Survive 中,使用 Bundle 来保存 ViewModel 的状态,但是当操作系统杀死应用程序时(例如:内存不足),此状态将无法保存。而 SavedStateRegistry 使用 ProcessLifecycleOwner 来注册并使用 SavedStateHandle 来保存和恢复 ViewModel 的状态,并在进程被杀死时自动调用 onSaveInstanceState() 来保存状态。
因此,在 Android 中使用带有 SavedState 的 ViewModel 更为安全和可靠,也更容易与应用程序的生命周期进行协调。以下是如何使用带有 SavedState 的 ViewModel 的示例。
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
class MyViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {
companion object {
private const val KEY_VALUE = "key_value"
}
fun saveValue(value: String) {
savedStateHandle.set(KEY_VALUE, value)
}
fun getValue(): String? {
return savedStateHandle.get<String>(KEY_VALUE)
}
}
在上面的示例中,我们创建了一个带有 SavedState 的 ViewModel,并使用 SavedStateHandle 来保存和恢复 ViewModel 的状态。
class MyActivity : AppCompatActivity() {
private val viewModel: MyViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
val value = viewModel.getValue()
textView.text = value ?: "No value found"
}
}
在上面的示例中,我们使用 viewModels() 方法来获取 MyViewModel 的实例,并在 onCreate() 方法中使用此 ViewModel。请注意,当操作系统杀死应用程序并重启时,ViewModel 的状态将自动恢复。
在 Android 应用程序中使用带有 SavedState 的 ViewModel 可以更安全、可靠,并且更容易与应用程序的生命周期进行协调。因此,我们建议您在应用程序中使用带有 SavedState 的 ViewModel。