天天看點

如何儲存 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()方法之前。