關於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)時:


第一次replace(2)時:


第一次replace(3)時:

點擊一次Back鍵即退出當前Activity:

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

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

第一次replace(1)時:


第一次replace(2)時:



第一次replace(3)時:


第二次replace(1)時:


點擊Back鍵回退時,棧中fragment依次彈出


點擊Back鍵退出Activity:

以上可以看出,使用replace()時,加入回退棧與不加入回退棧(即是否調用addToBackStack(null)方法)之間的區別在於:不加入回退棧,替換當前fragment是,被替換的fragment會執行onDetach()方法,若加入回退棧則只調用到onDestoryView()方法;加入回退棧,每次replace()都會向棧中添加fragment;

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

第一次add(1):


第一次add(2):


第一次add(3):


添加三個fargment,屏幕熄滅時調用:


添加順序1,2,3後再次點擊1/2/3,Activity/Fragment生命週期無變化,點擊Back鍵直接退出:

以上,可看出當調用add()替換時,fragment生命週期保持同步,在Back鍵後直接退出Activity,Fragment按添加順序銷燬

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

add(1)時:


add(2)時:


add(3):

突然無法上傳圖片了,就用文字描述吧,添加3時候和第三種情況添加3時相同;

最後點擊Back鍵時是從回退棧中挨個彈出fragment之後,再點擊退出Activity,如本例中3個fragment需要點擊4次Back鍵,方可退出當前Activity,而非直接退出Activity 


以上這些均是Demo測試的結果,可能存在錯誤,歡迎各位指正。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章