onSaveInstanceState和onRestoreInstanceState觸發的時機

當某個activity變得「容易」被系統銷燬時,該activity的onSaveInstanceState就會被執行,除非該activity是被用戶主動銷燬的,例如當用戶按BACK鍵的時候。 
注意上面的雙引號,何爲「容易」?言下之意就是該activity尚未被銷燬,而僅僅是一種可能性。這種可能性有哪些?經過重寫一個activity的全部生命週期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,咱們能夠清楚地知道當某個activity(假定爲activity A)顯示在當前task的最上層時,其onSaveInstanceState方法會在何時被執行,有這麼幾種狀況: 
一、當用戶按下HOME鍵時。 
這是顯而易見的,系統不知道你按下HOME後要運行多少其餘的程序,天然也不知道activity A是否會被銷燬,故系統會調用onSaveInstanceState,讓用戶有機會保存某些非永久性的數據。如下幾種狀況的分析都遵循該原則 
二、長按HOME鍵,選擇運行其餘的程序時。 
三、按下電源按鍵(關閉屏幕顯示)時。 
四、從activity A中啓動一個新的activity時。 
五、屏幕方向切換時,例如從豎屏切換到橫屏時。 
在屏幕切換以前,系統會銷燬activity A,在屏幕切換以後系統又會自動地建立activity A,因此onSaveInstanceState必定會被執行。 
總而言之,onSaveInstanceState的調用遵循一個重要原則,即當系統「未經你許可」時銷燬了你的activity,則onSaveInstanceState會被系統調用,這是系統的責任,由於它必需要提供一個機會讓你保存你的數據(固然你不保存那就隨便你了)。 
至於onRestoreInstanceState方法,須要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法「不必定」是成對的被調用的,onRestoreInstanceState被調用的前提是,activity A「確實」被系統銷燬了,而若是僅僅是停留在有這種可能性的狀況下,則該方法不會被調用,例如,當正在顯示activity A的時候,用戶按下HOME鍵回到主界面,而後用戶緊接着又返回到activity A,這種狀況下activity A通常不會由於內存的緣由被系統銷燬,故activity A的onRestoreInstanceState方法不會被執行。 
另外,onRestoreInstanceState的bundle參數也會傳遞到onCreate方法中,你也能夠選擇在onCreate方法中作數據還原。 生命週期

相關文章
相關標籤/搜索