Skip to content
阅读进度

如何理解ViewModel 能跨旋转 跨页面 跨进程死亡吗? ​

返回 View 与显示链路 目录

标准回答 ​

配置变化时,正确通过 ViewModelProvider 等机制获取的 ViewModel 通常可以保留;跨页面是否共享取决于 ViewModelStoreOwner 的作用域;进程死亡后原 ViewModel 对象一定不在了,需要重建并恢复数据。

机制配置变化后系统回收进程后适合保存
普通页面字段通常丢失丢失临时显示对象
ViewModel同作用域下可保留原对象丢失页面状态与相关逻辑
SavedStateHandle可恢复满足系统状态恢复条件时可恢复小型参数 选中项 查询条件
Room 文件 DataStore可重新读取可重新读取需要持久保存的数据

延伸追问 ​

SavedStateHandle 能替代数据库吗?不能,它依赖系统保存状态机制及任务恢复条件;用户主动结束任务等情况不能当作必然恢复。不要存大图、完整海量列表或活动连接,只保存重建所需的小型参数。(ViewModel 保存状态)

内容来源 ​

用完整回答理解机制,用真实证据解释项目。