Android進階乾貨鋪(一)——Activity的生命週期

一、典型情況下生命週期

這裏寫圖片描述
Activity 生命週期大家應該非常熟悉,值得注意的是,onCreate 和 onDestroy 配對,標識 Activity 的創建與銷燬; onStart 和 onStop 配對,標識 Activity 是否可見;onResume 和 onPause 配對,標識 Activity 是否在前臺,可交互。

一個典型的生命週期:onCreate ->onStart -> onResume ->onPause -> onStop ->onDestroy

這裏寫圖片描述
注意:
1. onPause 和 onStop 通常連續執行,除了:啓動一個新的透明主題 Activity,原 Activity 的 onStop 方法不會被回調(依然可見);
2. 從 Activity A 進入到 Activity B,回調順序是 onPause(A) -> onCreate(B) -> onStart(B) -> onResume(B) -> onStop(A),所以不能在 onPause 方法中做重量級的操作。因爲 onPause(A) 執行完後新 Activity 才能啓動。
3. 按back鍵回退,屬於正常情況,執行 onPause -> onStop -> onDestroy,並不是下面所要講的異常情況。

二、異常情況下生命週期

所謂的異常情況,通常指的是手機配置改變(見第3條)和因內存不足導致被系統回收(見4)。

  1. onSaveInstanceState 方法會在按Home鍵或者啓動新 Activity 以及 Activity 被異常終止時觸發調用。 Activity 被異常終止的情況下,它的調用時機是在 onStop 之前,它和 onPause 方法沒有既定的時序關係。當 Activity 被重新創建的時候,onRestoreInstanceState 會被回調,它的調用時機是 onStart 之後。非異常終止時,不調用 onRestoreInstanceState。
    “系統只會在 Activity 即將被銷燬並且有機會重新顯示的情況下才會去調用 onSaveInstanceState 方法。”

  2. 調用 onSaveInstanceState 與 onRestoreInstanceState 來儲存和恢復的數據,比如文本框中用戶輸入的數據、listview 滾動的位置等,這些 view 相關的狀態系統都會默認爲我們恢復。具體針對某一個 view 系統能爲我們恢復哪些數據可以查看 view 的源碼中的 onSaveInstanceState 和 onRestoreInstanceState 方法。

  3. android:configChanges=”xxx”屬性,常用的主要有下面三個選項:

    • local: 設備的本地位置發生了變化,一般指切換了系統語言;
    • keyboardHidden: 鍵盤的可訪問性發生了變化,比如用戶調出了鍵盤;
    • orientation: 屏幕方向發生了變化,比如旋轉了手機屏幕。

    • 配置了 android:configChanges=”xxx”屬性之後,Activity就不會在對應變化發生時重新創建,而是調用 Activity 的 onConfigurationChanged 方法。

  4. Activity 優先級(不易被回收程度):前臺 Activity > 可見但非前臺 Activity > 後臺 Activity。

發佈了32 篇原創文章 · 獲贊 14 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章