回家

Fragment生命周期

2018-10-24  本文已影响0人  腾_小棒槌


随缘

1、我们先看看整体的生命周期流程

Fragment 生命周期图

2、从一个Activity中的OnCreate和onStart中直接加载一个Fragment

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

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


activity和fragment生命周期对比

3、Add

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

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

4、Replace

如果之前没有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

5、Remove

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

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

6、Hide和Show

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

7、四种提交事务的方式 

commit、commitNow、commitAllowingStateLoss、commitNowAllowingStateLoss

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

commitNow 会立即执行事务

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

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

上一篇下一篇

猜你喜欢

热点阅读