Fragment的生命周期
Fragment主要用于将Activity的UI界面划分成多个可复用的部分,这样可以使App的UI界面更容易适应多种不同屏幕分辨率的设备。
Fragment作为可复用的组件,有独立的生命周期,但同时作为Activity的一部分,其生命周期也会受其所属Activity的生命周期的影响。
Fragment的生命周期如下图所示:
Fragment的生命周期与其所属Activity的生命周期之间的关系如下图所示:
onAttach
- Fragment被加入Activity时回调
onCreate
- Fragment被创建时回调,此方法中通常对一些需要持久化的成员进行初始化。
onCreateView
- Fragment在此方法中初始化UI组件,该方法返回一个View对象,作为该Fragment的UI界面的根组件。
onActivityCreated
- 当Fragment所属Activity的onCreate方法执行完成时回调此方法。
要注意的是, 执行前三个方法时,Fragment所属Activity可能尚未执行完onCreate方法,因此不能在这三个方法中依赖使用Activity的成员。
onStart
- 类似Activity的onStart方法,Fragment即将转入前台变成可见状态。
onResume
- 类似Activity的onResume方法,Fragment已经变成可见的状态,并获得用户焦点。
onPause
- 类似Activity的onPause方法,其他Fragment将转入前台替代此Fragment,或者Fragment所属的Activity即将被其他Activity所替代。
onStop
- 类似Activity的onStop方法,Fragment变成不可见状态,其他Fragment替代了此Fragment或者其所属的Activity变成完全不可见的状态。
Fragment的onStart方法到onStop方法与Activity的同名方法紧密相关,当Activity调用这些方法时,其包含的所有Fragment都会调用相对应的同名方法。
onDestroyView
- 当Fragment被从所属Activity中移走或者被其他Fragment替代时,系统调用此方法清理在onCreateView方法中创建的UI资源。
onDestroy
- Fragment的资源即将被系统回收,该Fragment将彻底消亡。
如果在删除或替换此Fragment之前,调用了addToBackStack方法将Transaction加入transaction栈,则执行完onDestroyView之后系统不会执行onDestroy。
onDetach
- Fragment从所属Activity中移除完成后调用。
只有当Fragment所属Activity进入Resumed状态,即执行完onResume方法之后,Fragment才可以自由反复地从其所属Activity中被移除或者被替换,才能独立进行生命周期的演变。