Fragment的生命周期定义了其从创建到销毁的完整过程,这些回调方法与宿主Activity的生命周期紧密关联,帮助开发者管理UI、资源和状态。以下是Fragment生命周期的详细解析,结合各阶段核心方法及实际应用场景:
一、生命周期阶段划分
1. 创建阶段
onAttach()
Fragment与宿主Activity建立关联,可通过getActivity()
获取Activity实例,适合初始化与Activity的通信接口。onCreate()
初始化与视图无关的成员变量(如数据加载),可恢复通过Bundle
保存的状态。onCreateView()
创建Fragment的UI布局(需返回View
对象),通过LayoutInflater
加载XML布局文件。onViewCreated()
视图创建完成后调用,适合进行控件绑定(如findViewById()
)和初始化交互逻辑。onActivityCreated()
宿主Activity的onCreate()
完成后触发,此时可安全操作Activity的其他组件(如Fragment间通信)。
2. 可见与交互阶段
onStart()
Fragment对用户可见(但未获取焦点),可启动动画或注册广播接收器。onResume()
Fragment进入活动状态,可与用户交互(如启动传感器监听、视频播放)。
3. 不可见阶段
onPause()
Fragment失去焦点但仍部分可见,需暂停耗时操作(如保存表单数据、释放摄像头资源)。onStop()
Fragment完全不可见,应停止网络请求或动画,避免资源浪费。
4. 销毁阶段
onDestroyView()
视图被移除时调用,需清除视图相关引用(如置空RecyclerView
适配器),防止内存泄漏。onDestroy()
清理非视图资源(如数据库连接、线程池),准备实例销毁。onDetach()
Fragment与Activity解绑,需释放对Activity的引用(如置空接口监听器)。
二、生命周期方法调用顺序
完整流程如下(以Fragment首次创建为例):
onAttach()
→ onCreate()
→ onCreateView()
→ onViewCreated()
→ onActivityCreated()
→ onStart()
→ onResume()
当Fragment不可见时:
onPause()
→ onStop()
当Fragment被销毁时:
onDestroyView()
→ onDestroy()
→ onDetach()
三、特殊场景与注意事项
-
配置变更(如屏幕旋转)
Fragment会经历完整销毁和重建,需通过
onSaveInstanceState()
保存临时数据,并在onCreate()
或onViewCreated()
中恢复。 -
Fragment事务管理
add()
/replace()
:新Fragment会触发旧Fragment的onPause()
至onDestroyView()
,但实例可能保留。detach()
:仅调用onDestroyView()
和onDetach()
,实例仍存在。
-
状态判断方法
isAdded()
:检查Fragment是否已附加到Activity。isVisible()
:判断Fragment是否对用户可见(需视图已创建且未被遮挡)。
四、实践建议
- 资源释放 :在
onPause()
或onStop()
中释放高耗资源(如传感器、动画),避免电量消耗。 - 异步操作管理 :在
onDestroyView()
中取消未完成的网络请求,防止内存泄漏。 - 视图与数据分离 :将数据初始化放在
onCreate()
,视图操作放在onViewCreated()
,确保逻辑清晰。
通过合理利用生命周期方法,开发者可以实现流畅的界面切换、高效资源管理及稳定状态保存,提升应用性能和用户体验。