使用Fragment應用放置後臺好久再次進入出現閃退的解決方法

解決辦法:在FragmentActivity裏oncreate方法判斷savedInstanceState==null才生成新Fragment;不然不作處理java

       	@Override
	protected void onCreate(Bundle savedInstanceState) {
    	if (savedInstanceState != null) {
            savedInstanceState.putParcelable("android:support:fragments",null);
            }  
		context = this;
	        super.onCreate(savedInstanceState);
		}

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

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

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

    系統經過FragmentActivity調用onSaveInstanceState保存Fragment對象,這時候系統恢復保存的Fragment,可是在FragmentActivity從新執行生命週期的時候,咱們從新生成了fragment對象附加到該FragmentActivity,系統恢復的Fragment和Activity失去關聯,出錯;
this

     因此,在FragmentActivity裏oncreate方法判斷savedInstanceState==null才生成新Fragment;不然不作處理。spa

相關文章
相關標籤/搜索