歡迎光臨
每天分享高質量文章

onSaveInstanceState & onRestoreInstanceState

前面兩節主要詳細講解了Activity的生命週期方法以及一些特定的場景,其中涉及到onSaveInstanceState和onRestoreInstanceState這兩個方法沒有講解,這篇部落格就來分析下這兩個方法的作用。

onSaveInstanceState

onSaveInstanceState字面理解就是儲存實體的狀態,當某個activity變得“容易”被系統銷毀時,該activity的onSaveInstanceState就會被執行,除非該activity是被使用者主動銷毀的,例如當使用者按BACK鍵的時候。

註意上面的雙引號,何為“容易”?言下之意就是該activity還沒有被銷毀,而僅僅是一種可能性。這種可能性有這麼幾種情況:

  • 1、當使用者按下HOME鍵時

這是顯而易見的,系統不知道你按下HOME後要執行多少其他的程式,自然也不知道activity A是否會被銷毀,故系統會呼叫onSaveInstanceState,讓使用者有機會儲存某些非永久性的資料。以下幾種情況的分析都遵循該原則

  • 2、長按HOME鍵,選擇執行其他的程式時。

  • 3、按下電源按鍵(關閉螢幕顯示)時。

  • 4、從activity A中啟動一個新的activity時。

  • 5、螢幕方向切換時,例如從豎屏切換到橫屏時。

在螢幕切換之前,系統會銷毀activity A,在螢幕切換之後系統又會自動地建立activity A,所以onSaveInstanceState一定會被執行

總而言之,onSaveInstanceState的呼叫遵循一個重要原則,即當系統“未經你許可”時銷毀了你的activity,則onSaveInstanceState會被系統呼叫,這是系統的責任,因為它必須要提供一個機會讓你儲存你的資料(當然你不儲存那就隨便你了)。

onRestoreInstanceState

onSaveInstanceState字面理解就是恢復實體的狀態, 需要註意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成對的被呼叫的,onRestoreInstanceState被呼叫的前提是,activity A“確實”被系統銷毀了,而如果僅僅是停留在有這種可能性的情況下,則該方法不會被呼叫,例如,當正在顯示activity A的時候,使用者按下HOME鍵回到主介面,然後使用者緊接著又傳回到activity A,這種情況下activity A一般不會因為記憶體的原因被系統銷毀,故activity A的onRestoreInstanceState方法不會被執行。

不過大多數情況下也是很少使用onRestoreInstanceState方法的,經常我們還是在onCreate方法裡直接恢復狀態的,onCreate方法裡本身會有一個Bundle引數的,很多時候我們是這樣使用的。(onCreate在onStart之前呼叫,而onRestoreInstanceState是在onStart之後呼叫)


至此Activity系列就完結了,歡迎大家反饋。

贊(0)

分享創造快樂