外观
如何正确处理 Fragment 的状态保存与恢复,避免内存泄漏?
标准回答
保存状态是为了重建后接着用;清理引用是为了让旧界面能被回收。它们解决的是两件事。
- onDestroyView 中清理 ViewBinding 和不再需要的 View 引用。
- 使用 viewLifecycleOwner 观察界面数据,取消与视图关联的回调。
- 可重建数据由 ViewModel/Repository 管理,必要的小状态保存到系统状态容器。
通俗例子
页面离开时在 onDestroyView 清空 binding,并让界面观察跟随 viewLifecycleOwner;选中的商品 ID 保存下来,回来后再加载。
深入解释
**保存状态怎么做:**保存的是能重建界面的数据,例如设备 ID、选中的标签和表单输入,而不是保存整个 View 对象。回来后用这些数据创建新的界面。
**释放引用怎么做:**在 onDestroyView 清理 binding 和界面回调,取消只属于这次 View 的任务。这样旧 View 不再被长期对象持有,才能在不可达时被垃圾回收。
易混淆点
仅在 Fragment.onDestroy 清理 binding 可能过晚;不要把 Activity 或 View 存进 ViewModel。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
1.2.2