Android Fragment的生命周期与Activity的生命周期紧密相关,但Fragment的生命周期更加复杂,因为它依赖于宿主Activity的生命周期。Fragment的生命周期包括多个回调方法,这些方法在Fragment的不同阶段被调用。以下是Fragment生命周期的主要阶段和回调方法:
-
onAttach(Context context):
- 当Fragment与Activity建立关联时被调用。这是Fragment生命周期的第一个回调方法。
- Fragment可以通过这个回调方法获取到宿主Activity的实例,但此时Fragment的视图还未创建。
-
onCreate(Bundle savedInstanceState):
- Fragment被创建时调用。
- 在这里可以进行Fragment的初始化操作,如加载数据等。
- 如果Fragment之前被保存过状态(例如,在屏幕旋转时),则可以通过savedInstanceState参数恢复状态。
-
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState):
- 当Fragment需要创建其用户界面时调用。
- 必须返回一个View对象,这个对象将成为Fragment的根视图。
- 如果Fragment不需要用户界面,可以返回null。
-
onActivityCreated(Bundle savedInstanceState):
- 当宿主Activity的onCreate()方法返回后调用。
- 此时,Fragment的Activity已经被创建,但Fragment的视图可能还未完全显示。
-
onStart():
- 当Fragment对用户可见时调用。
- 此时,Fragment的视图已经准备好,但还未出现在前台,用户可能看不到它(例如,如果Fragment被另一个Fragment覆盖)。
-
onResume():
- 当Fragment开始与用户交互时调用。
- 此时,Fragment的视图已经出现在前台,用户可以与之交互。
-
onPause():
- 当Fragment不再与用户交互时调用。
- 这通常发生在另一个Activity或Fragment即将覆盖它时。
- 在这个回调方法中,应该停止任何可能消耗CPU资源的操作,如动画或播放音频。
-
onStop():
- 当Fragment不再对用户可见时调用。
- 此时,Fragment的视图已经不可见,可能是因为宿主Activity被另一个Activity覆盖或宿主Activity正在被销毁。
-
onDestroyView():
- 当Fragment的视图被销毁时调用。
- 此时,Fragment的视图不再存在,但Fragment的实例仍然存在,并且仍然附加在Activity上。
- 应该在这个方法中清理与视图相关的资源,如取消注册监听器等。
-
onDestroy():
- 当Fragment不再被使用时调用。
- 此时,Fragment的实例即将被销毁,应该在这里清理所有资源,如取消网络请求、停止后台线程等。
-
onDetach():
- 当Fragment与Activity解除关联时被调用。
- 这是Fragment生命周期的最后一个回调方法。
- 在这里,Fragment的实例仍然存在,但不再与Activity有任何关联。
注意:Fragment的生命周期回调方法并不是严格按照上述顺序调用的,它们会根据Fragment的状态变化而被调用。例如,如果Fragment从未对用户可见(例如,在Activity的onCreate()方法中直接将其移除),则可能永远不会调用onStart()和onResume()方法。同样,如果Fragment被添加到回退栈中,并在用户离开Activity后仍然保留,则可能会调用onPause()、onStop()和onDestroyView(),但不会调用onDestroy()和onDetach(),直到用户从回退栈中移除Fragment或Activity被销毁。