- 為什麼要了解生命週期?
通常,每一個應用程式〈入口一般會是一個 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



沒有留言:
張貼留言