2016年4月1日 星期五

[Android] Activity的生命週期

需要了解Activity的生命週期才可以知道程式碼有沒有被執行到.
onCreate是這之中最常使用的,
App
打開首先被呼叫到的函式,
介面通常會在這個函式中建立。
onRestartApp重啟時被呼叫。
onStart
會在能被使用者看見時被呼叫;
onResume
則是當這個Activity到最上層時被呼叫;
onPause
離開最上層時;
onStop
使用者無法看見時;
onDestroy
關閉時。
上面這六個函式在簡單的App中不會用到,
不過這篇教學中會用到onRestart敬請期待,
以後當App寫得更複雜更龐大時,
你會發現這幾個函式非常好用。
目前需要注意的是,
這些函式必須先呼叫super
以及這些函式不能放花時間的程序,
因為這幾個函式是在打開、切換、關閉App時會被呼叫,
如果太花時間使用者就會感覺到明顯的Lag
假如真有需要跑這麼久的東西那就另外開Thread吧。
再來就算Activity關閉了,
onStop
onDestroy也有可能不會被呼叫到,
這表示Activity走了圖中左邊的路線,
這時就沒辦法依靠這兩者,
解決辦法會在以後的課程中提到。
這裏舉幾個例子:
打開Activity -> onCreate -> onStart -> onResume
執行時按返回鍵 -> onPause -> onStop -> onDestroy
執行時按最近使用程式鍵 -> onPause -> onStop
最近使用程式時往旁邊滑掉 -> onDestroy
最近使用程式時點回去 -> onRestart -> onStart -> onResume
執行時按home -> onPause -> onStop
接下來的比較複雜一點,
假設現在有兩個Activity叫做A1A2
A1中開啟A2 -> A1.onPause -> A2.onCreate -> A2.onStart -> A2.onResume -> A1.onStop
再關閉A2 -> A2.onPause -> A1.onRestart -> A1.onStart -> A1.onResume -> A2.onStop -> A2.onDestroy
至於什麼情形會用到這些函式,
比方說你的Activity用到相機,
那你應該在onPause將它關閉;
又比方說你的Activity有動畫,
那就該在onStop時將它停止。
打開上次開好的專案,
java
MyActivity.java的檔案中,
應該可以看到Android Studio幫你寫好的onCreate
底下雖然還有其他函式,
它們是用於建立Menu的函式,
但是我們目前用不到。
onCreate
裏的第一行就是先前說明的super
第二行是setContentView
這個函式的功能是將畫面設定成傳進去的佈局。Data source: http://tatsujin.m.candytan.org:8080/?p=158

沒有留言: