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

2018-07-04 10:24 更新

覆寫 onSaveInstanceState() 方法

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

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

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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)