2018-04-04—碎片Fragment生命周期

上次我们简单的使用了一下fragment(碎片),我们发现我们当时重写了一个叫做onCreateView的方法,这个方法是不是跟activity中的onCreate名字很像呢?其实fragment和activity的生命周期逻辑很像,只不过fragment的生命周期方法要比activity多一些,下面我们来看一下fragment的生命周期:



2018-04-04—碎片Fragment生命周期
2018-04-04—碎片Fragment生命周期
2018-04-04—碎片Fragment生命周期

这是我自己写的 fragment的简单的生命周期过程,由于图片比较长,所以我就把他分成三个部分了。他总共有11个生命周期方法,执行顺序如上图所示。

我们用上次动态加载碎片的代码来模拟一下fragment的生命周期方法执行过程。    

2018-04-04—碎片Fragment生命周期

我们第一个按键用来加载第一个fragment,第二个将之前的移除,换成第二个fragment,


2018-04-04—碎片Fragment生命周期
刚打开app
2018-04-04—碎片Fragment生命周期
刚启动执行activity的三个方法。

我们接下来点击第一个按钮,让他显示碎片1.


2018-04-04—碎片Fragment生命周期
第一次点击第一个按钮显示的界面
2018-04-04—碎片Fragment生命周期
第一次点击第一个按钮执行的方法

我们再点击第二个按钮。


2018-04-04—碎片Fragment生命周期
第一次点击第二个按钮显示的界面
2018-04-04—碎片Fragment生命周期
第一次点击第二个按钮执行的方法

我们再点击第一个按钮。


2018-04-04—碎片Fragment生命周期
第二次点击第二个按钮显示的界面
2018-04-04—碎片Fragment生命周期
第二次点击第二个按钮执行的方法


我们发现他没有执行onAttach和onCreate方法了。而且我们之前让第一个fragment消失,显示第二个fragment时候,他只是执行了onPause,onStop,onDestroyView。并没有执行onDestroy和onDetach方法,这是因为我在代码中加了一行很重要的代码。

2018-04-04—碎片Fragment生命周期

这个就是我最上面那张图上面写的那个方法,如果我们执行了addToBackStack方法,我们会将这个碎片放入返回栈中,而不是立即销毁解除绑定,现在我们点击back键,

2018-04-04—碎片Fragment生命周期
点击了back后,又弹出了第二个fragment
2018-04-04—碎片Fragment生命周期
点击back后执行的方法

我们发现2又回来了。

我们再一次点击back。

2018-04-04—碎片Fragment生命周期
第二次点击了back后
2018-04-04—碎片Fragment生命周期
第二次点击back执行的方法

我们看到这次2彻底的被销毁了,而且也和activity解除了绑定。

我们再点击back,大家应该都知道了,他会把我们第一次创建的fragment1页销毁,然后执行onDetach方法。

现在大家应该对fragment的生命周期有了一定了解了吧。