◎ 什麼是生命週期?
以人為例,即人有幼年(其階段工作為吃、睡、玩)、青年(其階段中主要的工作為學習)、壯年(其階段中主要的工作為工作、結婚)…等,而相對的物件也有生命週期,一個物件從創建到運行,及執行各式各樣的任務,並到最終的被銷毀等階段,我們也可稱其為物件的生命週期。
◎ Activity的生命週期函數與其調用時機
▲ Activity運行流程圖(長方形代表callback methods(回呼函式),可以做出想要處理的事情,有顏色的部份就是實際Activity會處於的狀態)
生命週期函數 |
調用時機 |
onCreate |
在Activity物件被第一次創建時調用,即通常用來做程式的初使化動作。 |
onStart |
當Activity變得可見時調用該函數。 |
onResume |
當Activity開始準備與用戶交互時調用該方法,即把保存的資料拿回來使用。 |
onPause |
當系統即將啟動另外一個Activity之前調用該方法,即把需要保存的資料保存。 |
onStop |
當前Activity變得不可見時調用該方法。 |
onDestroy |
當前Activity被銷毀之前將會調用該方法,即通常都拿來把onCreate()時的資料做釋放的動作。 |
onRestart |
當一個Activity再次啟動之前將會調用該方法。 |
1. Activity的生命週期函數為系統自行調用的,而非開發人員去控制的。不過,開發人員可於該函數中填入所要執行的程序。
2. 一般Android Application遵循的動作流程:
(1) 一般啟動
onCreate à onStart à onResume
啟動一個Activity的基本流程是:分配資源給這個Activity(onCreate),然後將Activity內容顯示到螢幕上(onStart),在一切就緒後,取得螢幕的控制權(onResume),使用者可以開始使用這個程式。
(2) 呼叫另一個Activity
onPause(1) à onCreate(2) à onStart(2) à onResume(2) à onStop(1)
先凍結原本的Activity,再交出直接存取螢幕控制權(onPause)的過程。直到Activity 2完成一般啟動流程後,Activity 1才會被停止。
(3) 回復原Activity
onPause(2) à onRestart(1) à onStart(1) à onResume(1) à onStop(2) à onDestroy(2)
按Back鍵可以回到原本的Activity。
(4) 退出/結束
onPause à onStop à onDestroy
如果程式中有直接呼叫finish函式來關閉Activity的話,系統會暫停(onPause)後停止(onStop),然後才是銷毀(onDestroy)。
(5) 回收後再啟動
onCreate à onStart à onResume
被回收掉的Activity一旦又重新被呼叫時,會像一般啟動一樣再次呼叫Activity的onCreate函式。
※參考資料:初學 Android - Android Activity生命週期簡介