fragment各种情况下的生命周期

fragment各种情况下的生命周期

 

fragment各种情况下的生命周期

 

根据使用分五种情况:

 

  1. Fragment在Activity中replace新替换的Fragment:

onAttach > onCreate > onCreateView > onViewCreated > onActivityCreated > onStart > onResume

被替换的Fragment:onPause > onStop > onDestroyView > onDestroy > onDetach

备注:addToBackStack()会在新Fragment启动之前保存旧的Fragment,当新的Fragment退出时,旧的Fragment就会重新加载

 

  1. Fragment在Activity中replace,并addToBackStack

如果新替换的Fragment没有在BackStack中:onAttach > onCreate > onCreateView > onViewCreated > onActivityCreated > onStart > onResume

如果新替换的Fragment已经在BackStack中:onCreateView > onViewCreated > onActivityCreated > onStart > onResume

被替换的Fragment:onPause > onStop > onDestroyView

 

  1. Fragment在ViewPager中切换

这里有很多种情况,

切换前的的Fragment称为PreviousFragment,简称PF;

切换后的Fragment称为NextFragment,简称NF;

其他Fragment称为OtherFragment,简称OF。

 

(在ViewPager中setUserVisibleHint能反映出Fragment是否被切换到后台或前台,所以在这里也当作生命周期)

 

A、如果相关的Fragment没有被加载过:(多onAttach > onCreate 流程)

NF: setUserVisibleHint(false) > onAttach > onCreate > setUserVisibleHint(true) > onCreateView > onViewCreated > onActivityCreated > onStart > onResume

 

OF跟NF相邻: setUserVisibleHint(false) > onAttach > onCreate > onCreateView > onViewCreated > onActivityCreated > onStart > onResume

 

  1. 如果相关的Fragment已经被加载过:(少onAttach > onCreate )

创建时:

NF跟PF相邻  :setUserVisibleHint(true)

相邻的会预先加载,所以放置前台即可

NF跟PF不相邻:setUserVisibleHint(true) > onCreateView > onViewCreated > onActivityCreated > onStart > onResume

不相邻则不会预先加载,故要重走一遍创建流程

OF跟NF相邻:onCreateView > onViewCreated > onActivityCreated > onStart > onResume

与切换后的界面相邻,需要预先加载,故启动创建流程

 

销毁时:

PF跟NF相邻  :setUserVisibleHint(false)

相邻放置后台即可,不必执行销毁

PF跟NF不相邻:setUserVisibleHint(false) > onPause > onStop > onDestroyView

不相邻,销毁即可

 

OF跟PF相邻:onPause > onStop > onDestroyView

与切换后的页面不相邻,销毁

 

OF夹在PF和NF中间:不调用任何生命周期方法

 

C、如果重写了FragmentPagerAdapter的destroyItem方法,并且相关Fragment已经加载过:

则相互切换时只会调用setUserVisibleHint

 

  1. Fragment进入了运行状态:

Fragment在上述的各种情况下进入了onResume后,则进入了运行状态,以下4个生命周期方法将跟随所属的Activity一起被调用:

onPause > onStop > onStart > onResume

 

  1. 关于Fragment的onActivityResult方法:

在重写FragmentActivity的onActivityResult方法时,注意调super.onActivityResult。因为在使用Fragment的startActivity方法时,FragmentActivity的onActivityResult方法会回调相应的Fragment的onActivityResult方法。

上一篇:The Little Prince-12/07


下一篇:BZOJ 4004 JLOI2015 装备购买 高斯消元+线性基