為什么需要用到Activity狀態保存, 如何用 ?
1)我們希望當前的Activity中的信息不會因為Activity狀態的改變,而丟失。比如橫豎屏的切換,突然來了個電話。
2)
借助Activity Lifecycle + Preference來完成狀態保存;(此處不做詳解)
借助onSaveInstanceState & onCreate or onRestoreInstanceState來完成狀態保存;
onSaveInstanceState方法會在什么時候被執行
onSaveInstance方法在系統回收Activity之前會調用;Back鍵不會調用。
1、當用戶按下HOME鍵時。
這是顯而易見的,系統不知道你按下HOME后要運行多少其他的程序,自然也不知道activity A是否會被銷毀,故系統會調用onSaveInstanceState,讓用戶有機會保存某些非永久性的數據。以下幾種情況的分析都遵循該原則
2、長按HOME鍵,選擇運行其他的程序時。
3、按下電源按鍵(關閉屏幕顯示)時。
4、從activity A中啟動一個新的activity時。
5、屏幕方向切換時,例如從豎屏切換到橫屏時。
在屏幕切換之前,系統會銷毀activity A,在屏幕切換之后系統又會自動地創建activity A,所以onSaveInstanceState一定會被執行
總而言之,onSaveInstanceState的調用遵循一個重要原則,即當系統“未經你許可”時銷毀了你的activity,則 onSaveInstanceState會被系統調用,這是系統的責任,因為它必須要提供一個機會讓你保存你的數據(當然你不保存那就隨便你了)。
至於onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和 onRestoreInstanceState方法“不一定”是成對的被調用的,onRestoreInstanceState被調用的前提 是,activity A“確實”被系統銷毀了,而如果僅僅是停留在有這種可能性的情況下,則該方法不會被調用,例如,當正在顯示activity A的時候,用戶按下HOME鍵回到主界面,然后用戶緊接着又返回到activity A,這種情況下activity A一般不會因為內存的原因被系統銷毀,故activity A的onRestoreInstanceState方法不會被執行。
