<h2 style="FONT-SIZE:large;">生命週期</h2>
<h3 style="BACKGROUND-IMAGE:none;PADDING-BOTTOM:0.5ex;BORDER-TOP-COLOR:#3366cc;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0.5em;BORDER-TOP-STYLE:solid;FONT-SIZE:medium;PADDING-TOP:0.5ex;">行程</h3>
<h3 style="BACKGROUND-IMAGE:none;PADDING-BOTTOM:0.5ex;BORDER-TOP-COLOR:#3366cc;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0.5em;BORDER-TOP-STYLE:solid;FONT-SIZE:medium;PADDING-TOP:0.5ex;">為什麼要了解生命週期</h3>
<h2 style="FONT-SIZE:large;">Activity 的狀態</h2>
Android 的虛擬機(VM)是使用堆疊 (Stack based) 管理。主要有四種狀態:
<h3 style="BACKGROUND-IMAGE:none;PADDING-BOTTOM:0.5ex;BORDER-TOP-COLOR:#3366cc;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0.5em;BORDER-TOP-STYLE:solid;FONT-SIZE:medium;PADDING-TOP:0.5ex;">Active (活動)</h3>
<h3 style="BACKGROUND-IMAGE:none;PADDING-BOTTOM:0.5ex;BORDER-TOP-COLOR:#3366cc;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0.5em;BORDER-TOP-STYLE:solid;FONT-SIZE:medium;PADDING-TOP:0.5ex;">Paused (暫停)</h3>
<h3 style="BACKGROUND-IMAGE:none;PADDING-BOTTOM:0.5ex;BORDER-TOP-COLOR:#3366cc;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0.5em;BORDER-TOP-STYLE:solid;FONT-SIZE:medium;PADDING-TOP:0.5ex;">Stopped (停止)</h3>
<h3 style="BACKGROUND-IMAGE:none;PADDING-BOTTOM:0.5ex;BORDER-TOP-COLOR:#3366cc;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0.5em;BORDER-TOP-STYLE:solid;FONT-SIZE:medium;PADDING-TOP:0.5ex;">Dead (已回收或未啟動)</h3>
「Dead」狀態是 Activity 尚未被啟動、已經被手動終止,或已經被系統回收的狀態。
要手動終止 Activity,可以在程式中呼叫「finish」函式。我們在加入選單一章中已經提到過了。
如果是被系統回收,可能是因為記憶體不足了,所以系統根據記憶體不足時的回收規則,將處於「Stopped」狀態的 Activity 所佔用的記憶體回收。
<h2 style="FONT-SIZE:large;">記憶體不足時的行為</h2>
<h2 style="FONT-SIZE:large;">觀察 Activity 運作流程</h2>
講了這麼多虛的,我們可以寫一些程式來直觀查看 Activity 的運作流程嗎?
當然可以。在上一章記錄與偵錯 (Log)中,我們學到的「Log」工具,正好可以在查看 Activity 的運作流程時派上用場。
打開「src/com/demo/android/bmi/Bmi.java」,在程式中加入一些「Log」記錄點:
public class Bmi 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");
}
}
<h3 style="BACKGROUND-IMAGE:none;PADDING-BOTTOM:0.5ex;BORDER-TOP-COLOR:#3366cc;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0.5em;BORDER-TOP-STYLE:solid;FONT-SIZE:medium;PADDING-TOP:0.5ex;">講解</h3>
<h2 style="FONT-SIZE:large;">Activity 運作流程</h2>
由實際運行的記錄來看,我們可以歸納出所有 Android 應用程式都遵循的動作流程:
<h3 style="BACKGROUND-IMAGE:none;PADDING-BOTTOM:0.5ex;BORDER-TOP-COLOR:#3366cc;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0.5em;BORDER-TOP-STYLE:solid;FONT-SIZE:medium;PADDING-TOP:0.5ex;">一般啟動</h3>
<h3 style="BACKGROUND-IMAGE:none;PADDING-BOTTOM:0.5ex;BORDER-TOP-COLOR:#3366cc;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0.5em;BORDER-TOP-STYLE:solid;FONT-SIZE:medium;PADDING-TOP:0.5ex;">呼叫另一個 Activity</h3>
<h3 style="BACKGROUND-IMAGE:none;PADDING-BOTTOM:0.5ex;BORDER-TOP-COLOR:#3366cc;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0.5em;BORDER-TOP-STYLE:solid;FONT-SIZE:medium;PADDING-TOP:0.5ex;">回原 Activity</h3>