FragmentActivity 被垃圾回收後如何處理

使用Fragment應用放置後臺很久,或者被360加速球清理後,被系統回收,出現crash

原因:FragmentActivity源碼調用onSaveInstanceState默認保存了Fragment對象,這時候系統恢復保存的Fragment,但是在FragmentActivity重新執行生命週期的時候,我們重新生成了fragment對象附加到該FragmentActivity,系統恢復的fragment和activity失去關聯,出錯;
處理:方法1.在fragmentActivity裏oncreate方法判斷savedInstanceState==null才生成新Fragment;否則不做處理;
方法2.在fragmentActivity裏重寫onSaveInstanceState方法,但不做實現;


FragmentActivity部分源碼如下
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
Parcelable p = this.mFragments.saveAllState();
if (p != null)
outState.putParcelable("android:support:fragments", p);
}

發佈了58 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章