Fragment生命周期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fragment生命周期相关的知识,希望对你有一定的参考价值。

参考技术A 首先调用Activity的onCreate和onStart,然后Fragment会连续的从onAttach到onStart,然后调用Activity的onResume,最后是Fragment的onResume。

** 值得注意的是Fragment的onSart方法可能是在Fragment的onSart方法之前被调用,而且Fragment从onAttach到onStart是一个连续的执行。

add一个Fragment的时候不管之前是否有其他的Fragment,其他的Fragment是以什么方式加进去的,都会从onAttach方法开始走到onResume

onAttach --> onCreate --> onCreateView --> onActivityCreated -->  onStart --> onResume

如果之前没有Fragment 直接Replace 相当于Add

onAttach --> onCreate --> onCreateView --> onActivityCreated -->  onStart --> onResume

如果之前有一个Fragment  A ,然后现在要 B replace A

B: onAttach --> onCreate   

A: onPause --> onStop -->  onDestroyView --> onDestory --> onDetach  (onDestory、onDetach取决于A是否有添加到回退栈)

B: onCreateView --> onActivityCreated -->  onStart --> onResume

当remove一个fragment的时候,它的生命周期跟是否添加到回退栈( addToBackStack )有关系。如果Fragment被添加到回退栈中的话,销毁时只会销毁View,生命周期走到onDestroyView,不会把整个Fragment销毁,跟Activity断开关联

onPause --> onStop -->  onDestroyView --> onDestory --> onDetach  (onDestory、onDetach取决于A是否有添加到回退栈)

通过 hide() 、 show() 来隐藏、显示Fragment,此时 Fragment 只改变了可见性,并不涉及生命周期的改变

commit、commitNow、commitAllowingStateLoss、commitNowAllowingStateLoss

commit 是异步操作,会将任务提交给主线程,

commitNow 会立即执行事务

commitAllowingStateLoss 和 commit的区别就是:commit如果在onSaveInstanceState之后提交会抛出IllegalStateException(无效状态异常)

状态的丢掉,指的是可能丢掉FragmentManager状态, 即onSaveInstanceState之后任何被添加或被移除的Fragments.

以上是关于Fragment生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Fragment生命周期

Fragment的生命周期

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

Fragment的生命周期

Fragment的生命周期

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