使用Fragment應用放置後臺很久再次進入出現程序奔潰

問題:

應用中存在Activity嵌套,Fragment,當應用長時間切換到後臺的時候,會有可能因爲系統內存不足回收應用Activity佔用的內存,這時候再次進入應用,出現各種例如空指針、閃退等問題;

原因:

當Fragment長久不使用,系統進行回收,FragmentActivity調用onSaveInstanceState保存Fragment對象。
Activity可能會被系統回收,然後Fragment並不會隨着Activity的回收而被回收,從而導致,Fragment丟失對應的Activity。
很長時間後,再次打開app,系統恢復保存的Fragment,但是在FragmentActivity重新執行生命週期的時候,我們重新生成了fragment對象附加到該FragmentActivity,系統恢復的fragment和activity失去關聯,進而出錯。

解決方法:

方案1:在fragmentActivity裏oncreate方法判斷savedInstanceState==null才生成新Fragment,否則不做處理。

方案2:在fragmentActivity裏重寫onSaveInstanceState方法,但不做實現,也就是將super.onSaveInstanceState(outState)註釋掉。 這樣你Activity銷燬了你也不用保存我Fragment的狀態了。

方案3:if(savedInstanceState!=null){
FragmentManager manager = getSupportFragmentManager();
manager.popBackStackImmediate(null, 1);
}判斷savedInstanceState不等以null就彈出所有Fragment 全部重新加載

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