Activity被回收致使fragment的getActivity爲null的解決辦法

    這兩天一直被這個問題困擾,假如app長時間在後臺運行,再點擊進入會crash,並且fragment頁面有重疊現象,讓我十分不爽。研究了一天,終於明白其中的原理並加以解決。解決辦法以下: app

    若是系統內存不足、或者切換橫豎屏、或者app長時間在後臺運行,Activity均可能會被系統回收,而後Fragment並不會隨着Activity的回收而被回收,從而致使,Fragment丟失對應的Activity。 spa

    這裏,假設咱們繼承於FragmentActivity的類爲MainActivity,其中用到的Fragment爲FragmentA。 指針

    app發生的變化爲:某種緣由系統回收MainActivity——FragmentA被保存狀態未被回收——再次點擊app進入——首先加載的是未被回收的FragmentA的頁面——因爲MainActivity被回收,系統會重啓MainActivity,FragmentA也會被再次加載——頁面出現混亂,由於一層未回收的FragmentA覆蓋在其上面——(假如FragmentA使用到了getActivity()方法)會報空指針,出現crash。 繼承

    原理雖然有點繞,可是解決辦法很簡單:
內存

    MainActivity重寫onSaveInstanceState方法,將super.onSaveInstanceState(outState);註釋掉,讓其再也不保存Fragment的狀態,達到其隨着MainActivity一塊兒被回收的效果
get

相關文章
相關標籤/搜索