Fragment中getActivity()空指針異常的原因

1、getActivity()空指針
2、異常:Can not perform this action after onSaveInstanceState
3、Fragment重疊異常-----正確使用hide、show的姿勢
4、Fragment嵌套的那些坑
5、未必靠譜的出棧方法remove()
6、多個Fragment同時出棧的深坑BUG
7、深坑 Fragment轉場動畫

一、getActivity()空指針

原因:activity在可能發生內存回收狀態時會調用 onSaveInstanceState方法保存狀態, Activity都可能會被系統回收然后重建,但Fragment并不會隨著Activity的回收而被回收,創建的所有Fragment會被保存到Bundle里面,從而導致Fragment丟失對應的Activity。
解決辦法

1、Fragment強引用Activity( 有引起內存泄露的風險,但是相比Crash,這種做法可以接受的)
protected Activity mActivity;   
 @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mActivity= (Activity) context;
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mActivity= null;
    }
2、從Activity保存/恢復狀態入手

第1種、不保存fragment的狀態: 在Activity中重寫onSaveInstanceState方法,將

  //super.onSaveInstanceState(outState);

注釋掉,讓其不再保存Fragment的狀態,達到fragment隨MyActivity一起銷毀的目的。
第2種 、重建時清除已經保存的fragment的狀態:在恢復Fragment之前把Bundle里面的fragment狀態數據給清除。方法如下:

    if(savedInstanceState!= null){
            String FRAGMENTS_TAG = "android:support:fragments";
            savedInstanceState.remove(FRAGMENTS_TAG);
        }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容