Skip to content
阅读进度

如何正确处理 Fragment 的状态保存与恢复,避免内存泄漏? ​

返回 性能与稳定性 目录

标准回答 ​

保存状态是为了重建后接着用;清理引用是为了让旧界面能被回收。它们解决的是两件事。

  • onDestroyView 中清理 ViewBinding 和不再需要的 View 引用。
  • 使用 viewLifecycleOwner 观察界面数据,取消与视图关联的回调。
  • 可重建数据由 ViewModel/Repository 管理,必要的小状态保存到系统状态容器。

通俗例子 ​

页面离开时在 onDestroyView 清空 binding,并让界面观察跟随 viewLifecycleOwner;选中的商品 ID 保存下来,回来后再加载。

深入解释 ​

**保存状态怎么做:**保存的是能重建界面的数据,例如设备 ID、选中的标签和表单输入,而不是保存整个 View 对象。回来后用这些数据创建新的界面。

**释放引用怎么做:**在 onDestroyView 清理 binding 和界面回调,取消只属于这次 View 的任务。这样旧 View 不再被长期对象持有,才能在不可达时被垃圾回收。

易混淆点 ​

仅在 Fragment.onDestroy 清理 binding 可能过晚;不要把 Activity 或 View 存进 ViewModel。

参考资料 ​

内容来源 ​

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