如何保存 Activity 的狀態(tài)

2018-07-04 10:24 更新

覆寫 onSaveInstanceState() 方法

Activity 的狀態(tài)通常情況下系統(tǒng)會自動保存的, 只有當我們需要保存額外的數(shù)據(jù)時才需要使用到這樣的功能.

一般來說, 調(diào)用 onPause() 和 onStop() 方法后的 activity 實例仍然存在于內(nèi)存中, activity 的所有信息和狀態(tài)數(shù)據(jù)不會消失, 當 activity 重新回到前臺之后, 所有的改變都會得到保留. 但是當系統(tǒng)內(nèi)存不足時, 調(diào)用 onPause() 和 onStop() 方法后的 Activity 可能會被系統(tǒng)摧毀, 此時內(nèi)存中就不會存有該 Activity 的實例對象了, 如果之后這個 Activity 重新回到前臺, 之前所作的改變就會消失.

為了避免此種情況的發(fā)生, 需要覆寫 onSaveInstanceState() 方法. onSaveInstanceState() 方法接受一個 Bundle 類型的參數(shù), 開發(fā)者可以將狀態(tài)數(shù)據(jù)存儲到這個 Bundle 對象中, 這樣即使 Activity 被系統(tǒng)摧毀, 當用戶重新啟動這個 Activity 而調(diào)用它的 onCreate()方法時, 上述的 Bundle 對象會作為實參傳遞給 onCreate()方法, 開發(fā)者可以從 Bundle 對象中取出保存的數(shù)據(jù), 然后利用這些數(shù)據(jù)將 activity 恢復(fù)到被摧毀之前的狀態(tài).

需要注意的是, onSaveInstanceState() 方法并不是一定會被調(diào)用的, 因為有些場景是不需要保存狀態(tài)數(shù)據(jù)的. 比如用戶按下 BACK 鍵退出 Activity 時, 用戶顯然想要關(guān)閉這個 Activity, 此時是沒有必要保存數(shù)據(jù)以供下次恢復(fù)的, 也就是 onSaveInstanceState() 方法不會被調(diào)用. 如果調(diào)用 onSaveInstanceState() 方法, 調(diào)用將發(fā)生在 onPause() 或 onStop() 方法之前.


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號