所以乾脆紀錄一下。
onCreate(),onStart(),onResume()
第一次開啟app時,依序執行onCreate(),onStart(),onResume(),之後的activity轉跳如果不是呼叫finis或是startActivity(
new
Intent(A.
this
, B.
class
))
onCreate()只會跑一次,所以會將元件以及變數的初始化寫在onCreate()裡面。
onStop(),onResume()
當目前activity不是在螢幕最上端的時候(也就是你看不到你目前正在看的頁面時),舉凡有其他app突然執行(來電,鬧鐘等等),或是你切換activity時沒呼叫finih,這些過程都會先跑onStop,所以可以在onStop裡面做一些釋放記憶體,硬體(相機),寫"少量"重要資料到DB等行為,但別做太多事情不然會導致換頁過慢。
當回到原本activity時會呼叫onResume(),所以可以在這邊寫在onStop()被你釋放掉的東西。
onStop(),onRestart()
當按下home鍵,或是切換app,都會跑到onStop(),並且建議在這邊做寫入DB等動作,因為有很大的機率不會馬上再啟動這個APP,雖然從onStop回來也會call onStart(),但是onRestart()只會是從onStop()回來,onStart()也會是onCreate,所以在onRestart()做復原的動作。
onSaveInstanceState(), onRestoreInstanceState()
onStop時會呼叫onSaveInstanceState(),並寫可以在這裡把activity狀態用key-vaule的方式儲存下來。
onCreate()會呼叫onRestoreInstanceState(),此時就可以取得之前儲存的bundle。
整體的lifeCycle
一般啟動
onCreate -> onStart -> onResume
呼叫另一個 Activity
onPause(1) -> onCreate(2) -> onStart(2) - onResume(2) -> onStop(1)
回原 Activity
onPause(2) -> onRestart(1) -> onStart(1) -> onResume(1) -> onStop(2) -> onDestroy(2)
回收後再啟動
onCreate -> onStart -> onResume
按home鍵
onPause -> onStop
測試用:
public class Lewis extends Activity { private static final String TAG = "Bmi"; public void onCreate() { super.onCreate(...); Log.v(TAG,"onCreate"); } public void onStart() { super.onStart(); Log.v(TAG,"onStart"); } public void onResume() { super.onResume(); Log.v(TAG,"onResume"); } public void onPause() { super.onPause(); Log.v(TAG,"onPause"); } public void onStop() { super.onStop(); Log.v(TAG,"onStop"); } public void onRestart() { super.onRestart(); Log.v(TAG,"onReStart"); } public void onDestroy() { super.onDestroy(); Log.v(TAG,"onDestroy"); } }
沒有留言:
張貼留言