程序從建立到被銷毀全過程 |
一個程序建立時系統會為它建立一個Activity(活動),緊接着調用onCreate(),onCreate()中主要是進行一些初始化,例如讀取XML資源檔案建立布局,設定主界面各種監聽函數等等,每個程序都會調用onCreate()。
接着是onStart(),需要說明的是,在預設 Activity中(就是程式一啟動我們看到的那個Activity實體),程式員在寫代碼的時候并不需要顯式去調用onStart(),系統會默默幫你調用;但是,當你需要在這個程式中建立除了預設Activity以外的所有新Activity的時候,你必須顯式調用這個onStart(),這個 onStart()有個新名字叫做startActivity(intent),這裡的intent表示一個意圖,就是我們想建立的新Activity。
然後是onResume(),當我們從主程式界面跳到别的地方再跳回來的時候調用onResume()。然後程式就跑起來了,我們叫他程序 A,如果這個時候其他程序變成了前端程序(程序B),此時程序A就會調用onPause(),這會儲存程序的狀态做資料持久化。這時候有兩種情況,程序A 再次成為前端程序,于是程序A調用onResume()來恢複運作;如果在程序A處于onPause()這段時間内系統記憶體不足了,程序A就有可能被銷毀,來為别的程序騰出記憶體(為什麼是“可能”被銷毀?詳見上面的android程序重要性層次說明),如果使用者再次切換到程序A,這是系統隻是重新建立一個程序,它不再是程序A了(因為此時程序A已經被銷毀了)。
當onPause()被調用以後使用者按了傳回鍵(back),那程序A會調用 onStop(),之前說了使用者此時已經沒有和程序A互動的願望了,是以程序A成為了“待銷毀”的對象(為什麼沒有直接銷毀呢?答案還是在android 程序重要性層次說明)。那麼如果在一個程序A還沒有被銷毀的時刻使用者再次切換到程序A,程序A又成為了前端程序,此時程序A會調用 onRestart(),進而調用onStart()來再次開始程序(此時重新開始的還是程序A本身,沒有換成其他的,因為程序A還未被銷毀),在這裡可以了解成把程序A“喚醒”了。如果很不幸,系統記憶體又不足了,調用了onStop()後的程序A可能再次被銷毀,就像圖上畫的那樣,這裡不再贅述。至于 onStop()後面的onDestroy()調用是在系統記憶體不足的時候由系統調用來銷毀程序和釋放記憶體的。