1. 程式人生 > >關於fragment,activity被回收之後重新恢復

關於fragment,activity被回收之後重新恢復

當記憶體不足的時候位於後臺的應用會被系統回收掉,只是保留著任務棧,再次進入的時候會恢復它們。

要注意的地方有:系統只會把ui相關的東西存起來和恢復,其他的一些成員變數都不會管。

會把生命週期和建立一樣重新走一遍,這個時候得注意那些不是從onCreat這樣的生命週期方法中獲得的變數狀態了,譬如那些執行的時候從網路獲取或者是其他模組傳過來的,最好在onSaveInstantstate中存起來。

注意那些子執行緒,一個在activity或者fragment中長期執行的子執行緒,會讓你的元件得不到釋放,並且在重新建立恢復的過程中隨著狀態的一些更改,譬如舊的fragment從activity中剝離了,持有舊fragment引用的子執行緒這個時候呼叫fragment的時候就會有getActivity()返回為空等問題了。

總結:模組間的資料傳送,最好使用系統提供的intent這樣的載體,有那些無法隨著生命週期的建立被恢復的變數時儘量將它通過saveInstanceBundle儲存起來,在重新建立的時候可以恢復。或者做好預防機制,比如網路請求的資料沒有了,這個時候可以重新載入請求