- 為什麼要了解生命週期?
通常,每一個應用程式〈入口一般會是一個 Activity 的 onCreate 方法〉,都會佔據一個 Process 。當系統記憶體即將不足的時候,會醫照優先及自動進行 Process 的回收。不管是使用者或開發者,都無法確定應用程式何時會被回收。
一個 Activity 類別除了「OnCreate」函式之外,還會預先定義「OnPause」、「OnResume」等等的基本行為。當從一個 Activity 切換到另一個 Activity 的時候,原本的 Activity 將經過一連串的狀態改變。開發者可以在程式中添加一些個狀態相對應的流程,每次 Activity 改變狀態實,就會執行相對應的流程。
要讓使用者有好的使用經驗,Activity 需要在各個周期點上負責保管狀態、恢復狀態、傳送資料等工作。
- Activity 的狀態
- Active
「Active」狀態是使用者啟動應用程式或 Activity 後,Activity 運行中的狀態。
- Paused
「Paused」狀態是目前運行的螢幕畫面暫時暗下來,退到背景畫面的狀態。
- Stopped
「Stopped」狀態是當有其他 Activity 正在執行,而這個 Activity 已經交出螢幕控制權,處於不在動作的狀態。
- Dead
「Dead」狀態是 Activity 尚未被啟動、已經被手動終止,或已經被系統回收的狀態。
「Active」狀態是使用者啟動應用程式或 Activity 後,Activity 運行中的狀態。
「Paused」狀態是目前運行的螢幕畫面暫時暗下來,退到背景畫面的狀態。
「Stopped」狀態是當有其他 Activity 正在執行,而這個 Activity 已經交出螢幕控制權,處於不在動作的狀態。
「Dead」狀態是 Activity 尚未被啟動、已經被手動終止,或已經被系統回收的狀態。
- 觀察 Activity 運作流程
public class Main extend Activity { private static final String TAG = "XXX"; public void onCreate() { super.onCreate(...); Log.v(TAG, "onCreate"); } public void onRestart() { super.onRestart(...); Log.v(TAG, "onRestart"); } public void onStart() { super.onStart(...); Log.v(TAG, "onStart"); } public void onResume() { super.onResume(...); Log.v(TAG, "onResume"); } public void onPause() { super.onPause(...); Log.v(TAG, "onPause"); } public void onStop() { super.onStop(...); Log.v(TAG, "onStop"); } public void onDestroy() { super.onDestroy(...); Log.v(TAG, "onDestroy"); } }
- 資源分配〈Create / Destroy〉
- 可見與不可見〈Start / ReStart / Stop〉
- 是否有螢幕控制權〈Resume / Pause〉
- Activity 運作流程
Android 官方網站上提供的 Activity 運作流程圖 |
- 一般啟動
onCreate -> onStart -> onResume
onCreate -> onStart -> onResume
啟動 Activity 時的狀態變化 |
- 呼叫另一個 Activity
onPause (1) -> onCreate (2) -> onStart (2) -> onResume (2) -> onStop (1)
呼叫另一個 Activity 時的狀態變化 |
- 返回原 Activity
onPause (2) -> onRestart (1) -> onStart (1) -> onResume (1) -> onStop (2) -> onDestroy (2)
返回原 Activity 時的狀態變化 |
- 退出結束
onPause -> onStop -> onDestroy
明確結束 Activity 時的狀態變化 |
- 回收後再啟動
onCreate -> onStart -> onResume
重新啟動時 Activity 的狀態變化 |
- 參考資料
Developer Android
沒有留言:
張貼留言