1. 程式人生 > >後臺的activity被系統自動回收的話,怎麼在回到介面的時候恢復資料

後臺的activity被系統自動回收的話,怎麼在回到介面的時候恢復資料

 Activity的狀態通常情況下系統會自動儲存的,只有當我們需要儲存額外的資料時才需要使用到這樣的功能。

通常情況:

 呼叫onPause()onStop()方法後的activity例項仍然存在於記憶體中, activity的所有資訊和狀態資料不會消失, activity重新回到前臺之後, 所有的改變都會得到保留。

異常情況

但是當系統記憶體不足時, 呼叫onPause()onStop()方法後的activity可能會被系統摧毀, 此時記憶體中就不會存有該activity的例項物件了。如果之後這個activity重新回到前臺, 之前所作的改變就會消失。

為了避免資料消失:

我們可以覆寫onSaveInstanceState()

方法。onSaveInstanceState()方法接受一個Bundle型別的引數, 開發者可以將狀態資料儲存到這個Bundle物件, 這樣即使activity被系統摧毀, 當用戶重新啟動這個activity而呼叫它的onCreate()方法時, 上述的Bundle物件會作為實參傳遞給onCreate()方法, 開發者可以從Bundle物件中取出儲存的資料, 然後利用這些資料將activity恢復到被摧毀之前的狀態。

需要注意的是:

onSaveInstanceState()方法並不是一定會被呼叫的, 因為有些場景是不需要儲存狀態資料的. 比如使用者按下BACK鍵退出activity,

使用者顯然想要關閉這個activity, 此時是沒有必要儲存資料以供下次恢復的, 也就是onSaveInstanceState()方法不會被呼叫. 如果呼叫onSaveInstanceState()方法, 呼叫將發生在onPause()onStop()方法之前。