先回顧生命周期 Activity一共有3中狀態 運行中 Activity位於前臺,並具有用戶焦點 暫停 另一個Activity位於屏幕前臺並具有用戶焦點,但此Activity仍可見。也就是說,另一個Activity顯示在此Activity上方,並且該Activity部分透明或未覆蓋整個屏幕。暫停的A ...
先回顧生命周期
- Activity一共有3中狀態
- 運行中
Activity位於前臺,並具有用戶焦點
暫停
另一個Activity位於屏幕前臺並具有用戶焦點,但此Activity仍可見。也就是說,另一個Activity顯示在此Activity上方,並且該Activity部分透明或未覆蓋整個屏幕。暫停的Activity處於完全活動狀態(Activity對象保留在記憶體中,它保留了所有狀態和成員信息,並與視窗管理器保持連接),但在記憶體極度不足的情況下,可能會被系統終止。
- 停止
該 Activity 被另一個 Activity 完全遮蓋(該 Activity 目前位於“後臺”)。 已停止的 Activity 同樣仍處於活動狀態(Activity 對象保留在記憶體中,它保留了所有狀態和成員信息,但未與視窗管理器連接)。 不過,它對用戶不再可見,在他處需要記憶體時可能會被系統終止。
如果 Activity 處於暫停或停止狀態,系統可通過要求其結束(調用其 finish() 方法)或直接終止其進程,將其從記憶體中刪除。(將其結束或終止後)再次打開 Activity 時,必須重建。
Activity的生命周期主要有7個回調函數:
- onCreate
- onResume
- onRestart
- onStart
- onPause
- onStop
- onDestroy
還有onSavaInstanceState
onRestoreInstanceState
等。
方法 | 說明 | 是否能事後終止? | 後接 | ||
---|---|---|---|---|---|
| 首次創建 Activity 時調用。 您應該在此方法中執行所有正常的靜態設置 — 創建視圖、將數據綁定到列表等等。系統向此方法傳遞一個 Bundle 對象,其中包含 Activity 的上一狀態,不過前提是捕獲了該狀態(請參閱後文的保存 Activity 狀態)。 始終後接 | 否 | onStart() | ||
| 在 Activity 已停止並即將再次啟動前調用。 始終後接 | 否 | onStart() | ||
| 在 Activity 即將對用戶可見之前調用。 如果 Activity 轉入前臺,則後接 | 否 | onResume() 或 onStop() | ||
| 在 Activity 即將開始與用戶進行交互之前調用。此時,Activity 處於 Activity 堆棧的頂層,並具有用戶輸入焦點。 始終後接 | 否 | onPause() | ||
| 當系統即將開始繼續另一個 Activity 時調用。此方法通常用於確認對持久性數據的未保存更改、停止動畫以及其他可能消耗 CPU 的內容,諸如此類。它應該非常迅速地執行所需操作,因為它返回後,下一個 Activity 才能繼續執行。 如果 Activity 返回前臺,則後接 | 是 | onResume() 或 onStop() | ||
| 在 Activity 對用戶不再可見時調用。如果 Activity 被銷毀,或另一個 Activity(一個現有 Activity 或新 Activity)繼續執行並將其覆蓋,就可能發生這種情況。 如果 Activity 恢復與用戶的交互,則後接 | 是 | onRestart() 或 onDestroy() | ||
| 在 Activity 被銷毀前調用。這是 Activity 將收到的最後調用。當 Activity 結束(有人對 Activity 調用了 ),或系統為節省空間而暫時銷毀該 Activity 實例時,可能會調用它。您可以通過 方法區分這兩種情形。 | 是 | 無 |
狀態保存
onSavaInstanceState
里保存Activity 的瞬態(UI 的狀態)onPause
里實現持久性數據保存(例如保存到資料庫)
處理屏幕旋轉、鍵盤可用性等變化
發生屏幕旋轉,鍵盤可用性變化之後,系統會調用onDestroy()
,然後立即調用onCreate()
。處理這種變化的最佳方法就是利用onSavaInstanceState()
和onRestoreInstanceState()
(或onCreate()
)保存並回覆Activity的狀態。