Android Studio移動應用開發——onCreate、onSaveInstanceState、onRestoreInstance一個參數和兩個參數

在做Android生命週期實驗過程中,把 Log.i(TAG, "(1) onCreate()") 寫到了含有兩個參數的函數 onSaveInstanceState(Bundle, PersistableBundle) 中,運行過程中並沒有輸出預想的內容。

在這裏插入圖片描述
查看函數定義,這個函數是通過調用 onSaveInstanceState(Bundle) 實現的。
在這裏插入圖片描述
那麼這兩個函數有什麼區別呢?

看上面圖上圈起來的"but",發現onSaveInstanceState(Bundle, PersistableBundle)只能被“persistAcrossReboots”屬性的activity調用。要用這個函數,需要在配置文件中爲Activity設置一個屬性:

android:persistableMode="persistAcrossReboots"

此後就可以使用含有兩個參數的onCreate、onSaveInstanceState、onRestoreInstance函數了。具體參見: bug修復-android中的onCreate兩個參數的方法是什麼鬼?


兩種函數使用場景的區別原文鏈接

  • onCreate(Bundle):當Activity非正常銷燬之後,例如手機旋轉,內存不足導致的後臺自動銷燬。
  • onCreate(Bundle, PersistableBundle):手機由於過熱,沒電或者第三方定製Rom由於卡頓而異常關機的情況,能找回之前前臺的數據,實際上是一種數據持久化的Activity。

onSaveInstanceState函數執行條件:

  1. 點擊home鍵回到主頁
  2. 點擊任務鍵選擇運行其他程序
  3. 從activity中啓動一個新的activity時
  4. 按下電源鍵關閉屏幕(執行onRestoreInstance)
  5. 橫豎屏切換(執行onRestoreInstance)

onRestoreInstance函數執行條件:
activity是被系統回收,重新創建activity的情況下調用onRestoreInstance()。如:按下電源鍵關閉屏幕、橫豎屏切換。

在這裏插入圖片描述
函數執行順序:

  1. onCreate()初始化Activity —> onStart()生成可視化界面 —> onResume()進入活動狀態。
  2. 旋轉屏幕後,onPause()進入暫停狀態 —> onStop()對用戶不可見 —> onSaveInstanceState()保存狀態信息 —> (橫豎屏切換的時候會由系統先銷燬activity,然後再重新創建)onStop()對用戶不可見 —> onDestory()銷燬活動,釋放資源
  3. 再次新建一個activity,由於activity是被系統回收,所以重新創建activity的情況下會調用onRestoreInstance():onCreate()初始化Activity —> onStart()生成可視化界面—> onRestoreInstance()恢復onSaveInstanceState()保存的用戶界面信息—> onResume()恢復被onPause()停止的用於界面更新的資源。

Activity事件回調函數的調用順序:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章