返回

黑盒揭秘:ViewModel如何从屏幕旋转的炼狱中浴火重生

Android

前言

在 Android 开发中,屏幕旋转是一个常见的操作。当屏幕旋转时,Activity 会被销毁并重建,这会导致 Activity 中的数据丢失。然而,如果使用 ViewModel,就可以避免数据丢失的问题。ViewModel 是一个与 Activity 生命周期无关的类,它可以在 Activity 被销毁后依然存在,因此可以用来存储数据。

ViewModel 数据恢复的原理

ViewModel 数据恢复的原理很简单,就是在 Activity 被销毁前将 ViewModel 中的数据保存下来,然后在 Activity 重建后将数据恢复到 ViewModel 中。

ViewModel 数据恢复可以分为以下几个步骤:

  1. 在 Activity 的 onSaveInstanceState() 方法中,将 ViewModel 中的数据保存到 Bundle 中。
  2. 在 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 来存储数据,以提高应用程序的健壮性。