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

时间:2021-01-30 14:42:33

本篇文章讲解自己探讨的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生命周期前后关系详解 关于Fragment与Activity生命周期前后关系详解 关于Fragment与Activity生命周期前后关系详解 关于Fragment与Activity生命周期前后关系详解 关于Fragment与Activity生命周期前后关系详解

第一次replace(2)时:

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

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

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

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

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

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

第一次replace(1)时:

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

第一次replace(2)时:

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

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

第一次replace(3)时:

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

第二次replace(1)时:

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

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

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

点击Back键退出Activity:
关于Fragment与Activity生命周期前后关系详解

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

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

第一次add(1):

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

第一次add(2):

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

第一次add(3):

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

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

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

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

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

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

add(1)时:

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

add(2)时:

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

add(3):

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

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


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