关于Fragment与Activity生命周期前后关系详解

本篇文章讲解自己探讨的Activity动态添加Fragment时,分4种情况:

1.使用replace(),且不加入回退栈addToBackStack(null);

2.使用replace(),且加入回退栈addToBackStack(null);

3.使用add(),       且不加入回退栈addToBackStack(null);

4.使用add(),       且加入回退栈addToBackStack(null);

以下为对这4种情况Fragment与Activity生命周期之间:

注:以下1-->FirstFragment;2-->SecondFrgment;3-->ThirdFragment

---------------------------------------------我是你们期待的分割线---------------------------------------------------------------------

1使用replace(),且不加入回退栈addToBackStack(null):

第一次replace(1)时:

关于Fragment与Activity生命周期前后关系详解_第1张图片

第一次replace(2)时:

关于Fragment与Activity生命周期前后关系详解_第2张图片

第一次replace(3)时:
关于Fragment与Activity生命周期前后关系详解_第3张图片

点击一次Back键即退出当前Activity:

关于Fragment与Activity生命周期前后关系详解_第4张图片

使用replace()方法添加Fragment,效果如同于remove()+add()fragment;执行到onDetach();

2.使用replace(),加入回退栈addToBackStack(null):

第一次replace(1)时:

关于Fragment与Activity生命周期前后关系详解_第5张图片

第一次replace(2)时:

关于Fragment与Activity生命周期前后关系详解_第6张图片

关于Fragment与Activity生命周期前后关系详解_第7张图片

第一次replace(3)时:

关于Fragment与Activity生命周期前后关系详解_第8张图片

第二次replace(1)时:

关于Fragment与Activity生命周期前后关系详解_第9张图片

点击Back键回退时,栈中fragment依次弹出

关于Fragment与Activity生命周期前后关系详解_第10张图片关于Fragment与Activity生命周期前后关系详解_第11张图片

点击Back键退出Activity:
关于Fragment与Activity生命周期前后关系详解_第12张图片

以上可以看出,使用replace()时,加入回退栈与不加入回退栈(即是否调用addToBackStack(null)方法)之间的区别在于:不加入回退栈,替换当前fragment是,被替换的fragment会执行onDetach()方法,若加入回退栈则只调用到onDestoryView()方法;加入回退栈,每次replace()都会向栈中添加fragment;

3.使用add(),不加入回退栈addToBackStack(null):

第一次add(1):

关于Fragment与Activity生命周期前后关系详解_第13张图片

第一次add(2):

关于Fragment与Activity生命周期前后关系详解_第14张图片

第一次add(3):

关于Fragment与Activity生命周期前后关系详解_第15张图片

添加三个fargment,屏幕熄灭时调用:

关于Fragment与Activity生命周期前后关系详解_第16张图片

添加顺序1,2,3后再次点击1/2/3,Activity/Fragment生命周期无变化,点击Back键直接退出:
关于Fragment与Activity生命周期前后关系详解_第17张图片

以上,可看出当调用add()替换时,fragment生命周期保持同步,在Back键后直接退出Activity,Fragment按添加顺序销毁

4.使用add(),加入回退栈addToBackStack(null):

add(1)时:

关于Fragment与Activity生命周期前后关系详解_第18张图片关于Fragment与Activity生命周期前后关系详解_第19张图片

add(2)时:

关于Fragment与Activity生命周期前后关系详解_第20张图片

add(3):

突然无法上传图片了,就用文字描述吧,添加3时候和第三种情况添加3时相同;

最后点击Back键时是从回退栈中挨个弹出fragment之后,再点击退出Activity,如本例中3个fragment需要点击4次Back键,方可退出当前Activity,而非直接退出Activity 


以上这些均是Demo测试的结果,可能存在错误,欢迎各位指正。


你可能感兴趣的:(android开发)