2012-02-25

Activity的生命週期


Activity的生命週期



內容說明:Activity的相關應用整理與生命週期說明
資料來源:Android Developers

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

Activity的生命週期如圖所示:

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

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() 方法。
這些控制生命週期的方法可以在Eclipse選單 Source > Override/Implement Methods 中找到。
在正常情況下,記憶會保存使用者輸入的資料,但是在記憶體不足時,系統會銷毀Stop狀態的activity,此時使用者輸入的資料會消失。此外, 若是系統設定在程式運行中改變(例如螢幕方向、鍵盤狀態和語言),則activity會立即銷毀並重建(執行onDestroy()後接著執行 onCreate())。

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