使用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);
}