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的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Fragment生命周期

Fragment的生命周期

深刻的理解Fragment生命周期 都在做什么,fragment生命周期

Fragment的生命周期

Fragment的生命周期

Fragment和Activity生命周期以及横竖屏切换对生命周期的影响