2009年6月1日 星期一

Android 生命週期探索



上面是Goole Android的一張活動流程圖
摘自http://developer.android.com/guide/topics/fundamentals.html
主要分成幾個主要的階段
  1. Create
  2. Start
  3. Restart
  4. Stop
  5. Pause
  6. Resume

其中跟記憶體等資源分配有關的活動有 CreateDestory,Activity記憶體等資源的規畫跟釋放都在這兩個階段完成

而影響是否能看見的事件有Start、ReStart、Stop三個狀態,當Activity跑到onstrat的時候,這個Activity就會處於螢幕上可以看見的狀態,而當處於Stop狀態的時候Activity就會從螢幕上消失,這邊要注意,來到stop只是讓Activity看不見,但是他仍存在,隨時可以用叫回來,而當Activity如果stop了,但是又被叫回來的話,就會先觸發Restart

當Activity是否能由使用者去引發Event,這要經過ResumePause狀態,當經過Resume的時候,才能正常做些什麼,反之亦然

總結以上,當"創造"一個Activity的時候,必然會經過三個階段
假設我有一個Activity叫A

A:onCreate->onStart->onResume

而當Activity呼叫另一個Activity的時候,會先呼叫Pause,在去創造新的Activity,然後在stop自己,假設A呼叫了Acivity B

A:onPause onStop
^
| |
ˇ
B: onCreate->onStart->onResume

其實A在pause自己之前會先執行一個onSaveInstanceState的階段,可以在這個階段做點事情




銷毀一個Activity必然會經過的三個階段則是

onPause->onStop->onDestroy


假設B已經退出了,現在回到A,B會先Pause,然後Restart A,之後在依照前面的步驟去start跟resume A,因為A之前沒有destroy,所以不會create而是restart,最後再回到B,把B給stop跟Destroy

A: onRestart->onStart->onResume
^
| |
ˇ
B: onPause onStop->onDestroy

而最後A也退出了,就會執行

A:onPause->onStop->onDestroy


所以不管如何,不論是或消滅都會經過三個階段,很多坊間的書登會提醒,要寫onResume跟onPause,因為當意外導致Activity被暫停的時候(比方說來電或沒電),必須把資料保留下來讓之後要回復的時候不會出錯
Resume跟Pause是程式創造、回復、消滅、暫停必然會執行的階段,所以防呆程式通常建議寫在這兩個地方

沒有留言: