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