外观
Fragment 与它的 View 为什么有两套生命周期?
标准回答
Fragment 实例和它创建的 View 生命周期不同。进入返回栈等场景中,Fragment 可能保留,但 View 已经 onDestroyView;恢复时重新创建 View。
关键机制
- 界面绑定在 onViewCreated 后使用;onDestroyView 时释放 ViewBinding 等界面引用,避免旧 View 树被继续持有。
- 观察仅用于界面的数据时使用 viewLifecycleOwner,确保更新绑定当前 View 的有效生命周期。
- Fragment 生命周期不会超过宿主或父 Fragment 的允许状态;导航操作也需要考虑状态是否已保存。
通俗例子
一个列表 Fragment 放进返回栈,旧 View 销毁。网络结果晚到时,不应去更新旧 binding;新 View 创建后再观察当前状态。
易混淆点
Fragment 还活着不代表它的 View 也活着;把监听绑定在 Fragment 本身可能让界面更新超出正确时段。
参考资料
内容来源
- Android 技术札记 · 原条目
fragment