Activity與Task
一個application包含多個Activity,這些Activity預設都有親屬關係,它們同屬一個task,當啟動Activity時,它們被放到了同一個task中,task是一個棧,一個task通常對應一個application中的多個activity,例如開啟郵件程式,該程式包含多個activity介面,他們都在同一個task中,但也可能對應的是不同application中的多個activity,例如郵件程式中,當查看圖片附件時,可能要開啟圖片查看程式中的activity,放該activity到當前的task中。
一個Task中的activity總是按照後進先出的順序進行,有時我們可能希望開啟的新Activity在一個新的task中,而不是和現有的activity在同一個task中,我們可以有兩種方式做到
Intent方式:intent.setFlag(Intent.FLAG_NEW_TASK);//不適合startActivityForResult()
Xml方式:設定activity的launchMode屬性
<activity android:name=".GongGaoListActivity"
android:launchMode="singleTask"
android:label="@string/app_name">
</activity>
這時啟動新的Activity時,系統會尋找與新Activity親屬關係相同的task,放到其中,複用這個task,如果找不到,就會為新Activity建立一個task。
有時我們可能需要不管task中有多少activity,不管他們如何排序,但總是從一個固定的Activity開始執行。這種情況,也是指定Activity的啟動模式為singleTask。
· 棧的清除:
預設情況下,如果使用者離開一個task較長時間,系統會自動清除除了棧底Activity之外的其他Activity,可以通過設定該棧底Activity的屬性來改變這種情況。
android:alwaysRetainTaskState:
設定為true,一直保留task狀態,不清除
android:clearTaskOnLaunch:
設定為true,使用者離開應用程式再次返回時,系統會清除除根Activity之外的所有Activity
android:finishOnTaskLaunch:
設定為true,使用者離開程式時,所有的Activity被清除。