想要清楚Fragment的生命周期变化一定要理解回退栈的作用,回退栈是栈,所以是先进后出,后进先出.点击back键的时候,最先被销毁的应该是最后添加到栈的对象。
代码比较简单,所以就不写了,简单的描述一下,Activity的布局中有两个按钮:
- 按钮一:在指定的位置添加Fragment1的对象
- 按钮二:在指定的位置添加Fragment2的对象,替换掉原来的
Fragment1的对象
我们这里主要研究Fragment1的对象的生命周期的变化
一、 将Fragment1和Fragment2的对象到加入到回退栈。(点击back键时一定要注意谁先被销毁)
(1)添加Fragment1的对象到指定位置,并将Fragment1的对象添加到回退栈。
onAttach-->onCreate-->onCreateView-->onActivityCreated-->onStart-->onResume
(2)在指定的位置添加Fragment2的对象,替换掉原来的Fragment1的对象, 并将Fragment2的对象添加到回退栈。
onPause-->onStop-->onDestroyView
(3)点击back键时。
onCreateView-->onActivityCreated-->onStart-->onResume
(4)再次点击back键时。
onPause-->onStop-->onDestroyView-->onDestroy-->onDetach
二、将Fragment1的对象加入都回退栈
(1)添加Fragment1的对象到指定位置,并将Fragment1的对象添加到回退栈
onAttach-->onCreate-->onCreateView-->onActivityCreated-->onStart-->onResume
(2)在指定的位置添加Fragment2的对象,替换掉原来的Fragment1的对象
onPause-->onStop-->onDestroyView
(3)点击back键时
onDestroy-->onDetach
三、将Fragment2的对象加入到回退栈
生命周期和第一个是一样的
原因分析:
第一个
第一步和第二步比较简单,不在赘述
点击back键时,先销毁Fragment2,因为Fragment2是最后加入到栈中的,此时,Fragment1就显现出来了
第二个
第一步和第二步比较简单,不在赘述
点击back键时,在手机界面上并没有什么变化,因为点击back键,是销毁回退栈中的对象,此时的回退找只有Fragment1,而Fragment1并没有显示在视图上,所以点击back键就是直接销毁没有显示在视图上Fragment1
第三个
自己分析