1. 程式人生 > >APP切換到後臺一段時間,再切換到前臺app崩潰的解決方案

APP切換到後臺一段時間,再切換到前臺app崩潰的解決方案

崩潰,控制檯還不列印具體的異常資訊,怎麼辦?測試機紅米2a,RAM 1G。知道是記憶體回收了activity,但不知道怎麼解決。

在網上搜了很多文章,最後還是定位到了onsaveinstancestate();於是就各種在這上面做文章。

我的專案中一個MainActivity繼承了FragmentActivity,包含了兩個fragment;當第一個或第二個fragment由前臺切到後臺執行一段時間,再切到前臺時,crash!在網上看了很多要在onsaveintancestate方法裡面儲存各種資訊,我想我也沒有需要儲存的資訊啊。於是看FragmentActivity裡面的

onSaveInstanceState方法:
protected void onSaveInstanceState(Bundle outState)
2    {
3      super.onSaveInstanceState(outState);
4      Parcelable p = mFragments.saveAllState();
5      if (p != null) {
6        outState.putParcelable("android:support:fragments", p);
7     }
8    }
FragmentActivity確實在onSaveInstanceState方法裡面將Fragment的狀態儲存了。
看了這個你應該也就明白了。讓FragmentActivity被系統回收的時候,不儲存Fragment的狀態即可,即在FragmentActivity中重寫onSaveInstanceState方法,也就是把super.onSaveInstanceState(outState)註釋掉就行了
至於問題的原因就是:Activity切換到後臺之後,由於記憶體不夠,Activity被系統回收,但附屬在上面的fragment被儲存了。在切換到前臺的時候,activity被重新例項化,而fragment再getActivity()時,get的是之前被回收掉的,而不是重新例項化的activity,返回null。情況就是這麼個情況。