返回

ViewModel:如何在屏幕旋转时拯救数据

Android

ViewModel:旋转屏幕时的救星

在Android应用开发中,ViewModel是一个类,用于在配置更改时保留数据,例如旋转屏幕。它与Activity或Fragment的生命周期无关,因此即使宿主重建,ViewModel仍能安全地保留数据。

让ViewModel经受住旋转风暴

为了让ViewModel在Activity发生旋转时保留数据,必须确保ViewModelStore不会随着宿主一起重建。ViewModelStore是存储ViewModel的地方,它是在Activity启动过程中创建的。

那么,ViewModelStore是什么时候保存的呢?在Activity启动过程中,当ActivityThread执行performDestroyActivity方法时,ViewModelStore会被保存到Bundle中。当Activity重建时,这个Bundle会被重新加载,ViewModelStore也会随之恢复。

使用ViewModelStore,轻松保留数据

下面是一个使用ViewModelStore保留数据的简单示例:

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putParcelable("viewModelStore", viewModelStore)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
    super.onRestoreInstanceState(savedInstanceState)
    viewModelStore = savedInstanceState?.getParcelable("viewModelStore")
}

通过在onSaveInstanceState中保存ViewModelStore,并在onRestoreInstanceState中恢复它,可以确保ViewModel在旋转屏幕时保留数据。

结论

ViewModel是Android开发中一个强大的工具,它可以通过ViewModelStore轻松地保留数据,即使在旋转屏幕时也是如此。通过遵循本文中概述的步骤,开发人员可以确保他们的应用在各种配置更改中保持数据完整性。