Fragment的生命周期
Posted lgz0921
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fragment的生命周期相关的知识,希望对你有一定的参考价值。
Fragment具有与Activity很相似的生命周期,依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。
首先来看两张图,第一张是Fragment生命周期流程图
第二张是Activity和Fragment生命周期对比流程图
从第二张图可以看出,Activity中的生命周期方法,Fragment中都有,但是Fragment比Activity多几个方法。各生命周期方法的含义如下:
- onAttach() :当Fragment与Activity发生关联时调用。
- onCreate():创建Fragment时被回调。
- onCreateView():每次创建、绘制该Fragment的View组件时回调该方法,Fragment将会显示该方法返回的View 组件。即:创建Fragment布局
- onActivityCreated():当 Fragment 所在的Activity被启动完成后( onStart() 后)回调该方法。
- onStart():启动 Fragment 时被回调,此时Fragment可见。
- onResume():恢复 Fragment 时被回调,获取焦点时回调。
- onPause():暂停 Fragment 时被回调,失去焦点时回调。
- onStop():停止 Fragment 时被回调,Fragment不可见时回调。
- onDestroyView():销毁与Fragment有关的视图,但未与Activity解除绑定。
- onDestroy():销毁 Fragment 时被回调。
- onDetach():与onAttach相对应,当Fragment与Activity关联被取消时调用。
6中操作情况下的生命周期的具体调用顺序
1)创建Fragment
onAttach() —> onCreate() —> onCreateView() —> onActivityCreated() —> onStart() —> onResume()
2)按下Home键回到桌面 / 锁屏
onPause() —> onStop()
3)从桌面回到Fragment / 解锁
onStart() —> onResume()
4)切换到其他Fragment
onPause() —> onStop() —> onDestroyView()
5)切换回本身的Fragment
onCreateView() —> onActivityCreated() —> onStart() —> onResume()
6) 按下Back键退出
onPause() —> onStop() —> onDestroyView() —> onDestroy() —> onDetach()
谷歌官方的一张图:
介绍一下前面没介绍过的方法:
- onViewCreated():在Fragment布局被创建后调用
- onViewStateRestored():当保存的所有状态都恢复到片段的视图层次结构中时调用。这可以用于根据保存的视图层次结构跟踪自身的状态(比如当前是否选中复选框小部件)进行初始化。这是在onActivityCreated(Bundle)之后和onStart()之前调用的。
- onSaveInstanceState():调用此函数以要求 fragment 保存其当前动态状态,以便稍后可以在其流程的新实例中重新启动它。如果稍后需要创建片段的新实例,那么您放置在此包中的数据将在提供给onCreate(Bundle)、onCreateView(LayoutInflater、ViewGroup、Bundle)和onActivityCreated(Bundle)的 Bundle 中可用。这对应于 Activity 的 onSaveInstanceState(Bundle)。注意:这个方法可以在onDestroy()之前的任何时候调用。在很多情况下,一个片段可能会被撕下来(例如当它被放在后台堆栈上而没有UI显示时),但是它的状态将不会被保存,直到它所拥有的 Activity 实际上需要保存它的状态。
以上是关于Fragment的生命周期的主要内容,如果未能解决你的问题,请参考以下文章