You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导航抽屉中Fragment生命周期探究:切换时会销毁、暂停还是重建?

导航抽屉中Fragment的生命周期与切换状态解析

一、Fragment填充至主Activity后的完整生命周期流程

Fragment从依附到Activity到最终销毁,会依次触发以下生命周期方法:

  • onAttach():Fragment与Activity建立关联,可在此获取宿主Activity的实例
  • onCreate():Fragment初始化阶段,完成数据加载、全局变量初始化等核心准备工作
  • onCreateView():创建Fragment的视图布局,返回布局的根View对象
  • onViewCreated():视图创建完成后调用,适合在此绑定控件、设置事件监听
  • onStart():Fragment变为可见状态,但尚未获得交互焦点
  • onResume():Fragment可见且获得焦点,处于活跃状态,可正常响应用户操作
  • onPause():Fragment失去焦点但仍可见(如被弹窗遮挡),停止响应用户交互
  • onStop():Fragment完全不可见,可在此释放非必需资源
  • onDestroyView():Fragment的视图被销毁,释放所有与视图绑定的资源(如控件引用)
  • onDestroy():Fragment实例即将被销毁,释放所有持有的资源
  • onDetach():Fragment与Activity解除关联,彻底脱离宿主

二、导航抽屉菜单项切换时已存在Fragment的状态

状态取决于你采用的切换实现方式,常见两种场景:

1. 官方Navigation组件默认切换(replace方式)

这是导航抽屉最常用的实现方式,此时:

  • 切换到新Fragment时,原Fragment会依次执行 onPause() → onStop() → onDestroyView(),但Fragment实例本身不会被销毁(onDestroy()和onDetach()不会触发),实例仍保留在内存中,成员变量的数据会被保留。
  • 再次切回该Fragment时,会重新执行 onCreateView() → onViewCreated() → onStart() → onResume(),视图会被重建,但实例的状态数据无需重新加载。

2. 自定义hide/show切换方式

如果通过FragmentTransaction.add()添加Fragment,切换时使用hide()和show()方法:

  • 切换到新Fragment时,原Fragment仅会执行onPause()(若失去焦点),视图和实例都会被保留,只是界面被隐藏。
  • 再次切回时,直接执行onStart() → onResume(),无需重建视图,切换效率更高。

内容的提问来源于stack exchange,提问作者user21958688

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:52:11