Skip to content
阅读进度

Fragment 的生命周期与宿主 Activity 的生命周期有何关联和差异? ​

返回 Android 核心 目录

标准回答 ​

Fragment 的生命周期受宿主和 FragmentManager 限制,不能超过允许的最高状态;它还有独立且可能更短的 View 生命周期。Activity 管页面容器,Fragment 管组件,Fragment 的 View 管这一次界面。

**常见回调流程:**Fragment 创建视图时:onAttach → onCreate → onCreateView → onViewCreated → onViewStateRestored → onStart → onResume。向下依次经过 onPause、onStop;销毁视图会 onDestroyView,真正销毁组件再 onDestroy、onDetach。具体事务可能只走其中一段。

**最关键的区别:**Fragment 放回退栈后,View 可能销毁而 Fragment 实例仍在;因此界面观察绑定 viewLifecycleOwner,binding 等 View 引用在 onDestroyView 清理,而不是等到 onDestroy。

通俗例子 ​

详情 Fragment 放进返回栈时,界面 View 可能已销毁,但 Fragment 对象仍保留。回来后重新创建 View,不能继续使用旧 binding。

深入解释 ​

**两个生命周期指什么:**Fragment 是管理页面逻辑的对象,View 是它这一次创建的界面。Fragment 留在返回栈时,旧 View 可能已被销毁,回来会再创建一套新 View。

**为什么会出错:**若观察者跟随 Fragment 而不是这次 View 的生命周期,旧界面消失后仍可能收到更新。界面数据观察通常使用 viewLifecycleOwner,并在 onDestroyView 清理 View 引用。

易混淆点 ​

Fragment 还活着,不等于它的 View 还存在。

参考资料 ​

内容来源 ​

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