Board logo

標題: Activity的生命週期 [打印本頁]

作者: tonyh    時間: 2018-3-3 14:08     標題: Activity的生命週期

本帖最後由 tonyh 於 2018-3-3 14:23 編輯

Activity是讓我們進行某個功能時的畫面,它的產生是採取堆疊制的,越晚出現的畫面放在最上面,一旦最後出現的畫面被關閉,就會開啟倒數第二個畫面,即是我們在操作Android手機時,若按下"返回"鍵,就會回到上一個畫面的意思。

Activity的生命週期如圖所示:

[attach]3476[/attach]

onCreate()
當activity第一次被啟動時呼叫。此時系統會建立activity的畫面,並且可以透過Bundle等物件進行初始化設定。

onStart()
讓activity能被使用者看見。

onResume()
將activity移到堆疊的最上層,讓使用者可以和activity互動。

onPause()
當有簡訊、電話、Toast、AlertDialog等另外一個activity進行時,進入onPause()的狀態,停止對螢幕的存取能力。如果畫面沒有轉移,則回到onResume();若畫面轉移到新的activity時,則進入onStop()。

onStop()
當使用者看不見此activity的畫面時產生。如果這個activity無法透過返回鍵回復,則進入onDestroy();反之則繼續停留在Stop狀態,當使用者返回此頁面時,則進入onRestart()。

onRestart()
重新啟動Stop狀態的activity。

onDestroy()
當activity被銷毀時執行。銷毀的原因有幾種:activity不會再被使用、程式呼叫finish()、系統因記憶體不足而銷毀Stop程序。要確認activity是否被銷毀可使用 isFinishing() 方法。

Activity的生命週期函數為系統自行調用的,而非開發人員去控制的。不過,開發人員可於該函數中填入所要執行的程序。

在正常情況下,記憶會保存使用者輸入的資料,但是在記憶體不足時,系統會銷毀Stop狀態的activity,此時使用者輸入的資料會消失。此外,若是系統設定在程式運行中改變(例如螢幕方向、鍵盤狀態和語言),則activity會立即銷毀並重建(執行onDestroy()後接著執行onCreate())。

因此如果我們寫的程式不希望使用者輸入的資料因為種種原因而消失,則必需要在onPause()的時候將資料儲存起來,並且在onCreate()將資料讀出,重新顯示在畫面上。

總結上述,一般Android應用程式所遵循的動作流程如下:

【一般啟動】

onCreate --> onStart --> onResume

啟動一個Activity的基本流程是:分配資源給這個Activity(onCreate),然後將Activity內容顯示到螢幕上(onStart),在一切就緒後,取得螢幕的控制權(onResume),使用者可以開始使用這個程式。

【呼叫另一個Activity】

onPause(1) --> onCreate(2) --> onStart(2) --> onResume(2) --> onStop(1)

先凍結原本的Activity,再交出直接存取螢幕控制權(onPause)的過程。直到Activity 2完成一般啟動流程後,Activity 1才會被停止。

【回復原Activity】

onPause(2) --> onRestart(1) --> onStart(1) --> onResume(1) --> onStop(2) --> onDestroy(2)

按Back鍵可以回到原本的Activity。

【退出/結束】

onPause --> onStop --> onDestroy

如果程式中有直接呼叫finish函式來關閉Activity的話,系統會暫停(onPause)後停止(onStop),然後才是銷毀(onDestroy)。

【回收後再啟動】

onCreate --> onStart --> onResume

被回收掉的Activity一旦又重新被呼叫時,會像一般啟動一樣再次呼叫Activity的onCreate函式。




歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2