情境
今天我有一個 activity 要 replace A fragment,在 A fragment 裡按 button 去 add B fragment,畫面上最後呈現 B,按下 back 會回到 A,再按 back 會離開 app。
內存重啟後,我需要保持一致的流程。
結論:
在 activity 調用 fragment 時判斷 savedInstanceState
如果 savedInstanceState == null 表示 activty 是「新建立」的
這時候調用 A fragment 的 replace
如果 savedInstanceState != null 表示 activty 是「重新建立」的
什麼都不用做,app 就幫你恢復好了
如果沒有判斷 savedInstanceState ,則每次重新建立 activity 時也會重新replace 新的 A fragment,造成畫面或 backStackEntryCount 不如預期。
如果你需要對 app 幫你恢復的 fragment 做事的話,在一開始 replace 或 add fragment 時就要加上 tag,重建後調用 supportFragmentManager#findFragmentByTag 來做事,大概4這樣。
PS. 做這種測試的時候之前都是用app 提供的清除內存工具,最近發現開發人員選項裡有個「不要保留活動」,可以更快實現這樣的測試~
沒有留言:
張貼留言