Skip to content
阅读进度

在 Android 10+ 中,如何处理后台 Activity 被系统回收后的状态恢复? ​

返回 Android 核心 目录

标准回答 ​

进程被回收后,原来的 ViewModel、静态变量和普通对象都不再存在。新 Activity 在 onCreate 中读取 savedInstanceState 或 SavedStateHandle 的小状态,再按保存的 ID 从数据库或 Repository 恢复业务数据。

**具体保存什么:**保存草稿 ID、选中项、筛选条件和必要输入;大对象、图片和完整结果集不塞 Bundle。必须长期保留的数据及时持久化,不能只等 onDestroy。

通俗例子 ​

编辑页退到后台后进程被回收。重新进入时用保存的草稿 ID、输入内容和选中项恢复,而不是期待静态变量还在。

深入解释 ​

**系统保留了什么:**任务记录可以知道用户之前打开过哪个页面,但原进程中的静态变量、普通对象和线程都可能已经消失。回来时经常是重新创建进程和页面。

**怎样恢复到原位置:**先恢复设备 ID、列表位置、草稿 ID 等小状态,再从数据库或服务重新加载数据。恢复结果也要校验,例如原设备已经被删除,就应给出明确提示。

易混淆点 ​

系统回收进程不保证调用 onDestroy;用户主动结束页面也不等同于系统保留任务后的恢复。

参考资料 ​

内容来源 ​

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