首页 > 解决方案 > 当我们有 ViewModels 时,我们还需要 onSaveInstanceState() 吗?

问题描述

现在有了 View 模型,我们可以处理配置更改和管理 UI 数据,所以我现在觉得 onSaveInstance() 对我没有用。

就像之前我们在SaveInstanceState() 上存储较小的数据并在配置期间用于恢复它一样,现在使用视图模型我们可以轻松获取更新的数据。如果我们使用 ViewModel ,您能否告诉我onSaveInstanceState()onRestoreInstancestate()现在的实际用法是什么。

你能告诉我在当前情况下它在 ViewModel 中的用法吗

标签: androidkotlinmvvmviewmodel

解决方案


当 Android 操作系统由于内存限制而决定终止您的应用程序进程然后重新创建它时,数据仍然可能丢失。这与配置更改不同。

ViewModelActivity从配置更改( / Recreation)中成功保存您的数据,但在Process RecreationFragment的情况下它不会有太大帮助。

为了即使在 Process Recreation 的情况下也能持久保存数据,您需要使用onSaveInstanceState().

然而,随着最近的更新,通过SavedStateHandle ViewModel直接允许您保存实例状态,这将自动在进程死亡/重新创建后继续存在。这意味着,您不再需要使用onSaveInstanceStateActivity/Fragment的跨进程死亡来持久化数据,只需SavedStateHandle在您的中使用ViewModel,它就会起到相同的作用。


推荐阅读