返回
黑盒揭秘:ViewModel如何从屏幕旋转的炼狱中浴火重生
Android
2024-02-17 06:03:20
前言
在 Android 开发中,屏幕旋转是一个常见的操作。当屏幕旋转时,Activity 会被销毁并重建,这会导致 Activity 中的数据丢失。然而,如果使用 ViewModel,就可以避免数据丢失的问题。ViewModel 是一个与 Activity 生命周期无关的类,它可以在 Activity 被销毁后依然存在,因此可以用来存储数据。
ViewModel 数据恢复的原理
ViewModel 数据恢复的原理很简单,就是在 Activity 被销毁前将 ViewModel 中的数据保存下来,然后在 Activity 重建后将数据恢复到 ViewModel 中。
ViewModel 数据恢复可以分为以下几个步骤:
- 在 Activity 的
onSaveInstanceState()
方法中,将 ViewModel 中的数据保存到 Bundle 中。 - 在 Activity 的
onCreate()
方法中,从 Bundle 中恢复 ViewModel 中的数据。
ViewModel 数据恢复的示例
class MainActivity : AppCompatActivity() {
private val viewModel = MyViewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 从 Bundle 中恢复 ViewModel 中的数据
if (savedInstanceState != null) {
viewModel.restoreState(savedInstanceState)
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
// 将 ViewModel 中的数据保存到 Bundle 中
viewModel.saveState(outState)
}
}
在上面的示例中,我们在 Activity 的 onCreate()
方法中从 Bundle 中恢复 ViewModel 中的数据,并在 Activity 的 onSaveInstanceState()
方法中将 ViewModel 中的数据保存到 Bundle 中。这样,即使屏幕旋转导致 Activity 被销毁并重建,ViewModel 中的数据也不会丢失。
总结
ViewModel 数据恢复是一个非常实用的技术,可以帮助我们避免数据丢失的问题。在实际开发中,我们应该尽量使用 ViewModel 来存储数据,以提高应用程序的健壮性。