外观
在 Android 10+ 中,如何处理后台 Activity 被系统回收后的状态恢复?
标准回答
进程被回收后,原来的 ViewModel、静态变量和普通对象都不再存在。新 Activity 在 onCreate 中读取 savedInstanceState 或 SavedStateHandle 的小状态,再按保存的 ID 从数据库或 Repository 恢复业务数据。
**具体保存什么:**保存草稿 ID、选中项、筛选条件和必要输入;大对象、图片和完整结果集不塞 Bundle。必须长期保留的数据及时持久化,不能只等 onDestroy。
通俗例子
编辑页退到后台后进程被回收。重新进入时用保存的草稿 ID、输入内容和选中项恢复,而不是期待静态变量还在。
深入解释
**系统保留了什么:**任务记录可以知道用户之前打开过哪个页面,但原进程中的静态变量、普通对象和线程都可能已经消失。回来时经常是重新创建进程和页面。
**怎样恢复到原位置:**先恢复设备 ID、列表位置、草稿 ID 等小状态,再从数据库或服务重新加载数据。恢复结果也要校验,例如原设备已经被删除,就应给出明确提示。
易混淆点
系统回收进程不保证调用 onDestroy;用户主动结束页面也不等同于系统保留任务后的恢复。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
1.5.3