Task 其實(shí)就是一組 Activity 的集合,這些 Activity 被放在一個(gè)棧里(Back Stack 后進(jìn)先出)。當(dāng)用戶(hù)按 Back 鍵時(shí)棧頂?shù)?Acitvity 被彈出。注意和按 Home 鍵不一樣,按 Home 鍵棧里的 Activity 的狀態(tài)會(huì)保存,按 Back 鍵彈出的 Activity 就被銷(xiāo)毀了。
這節(jié)看得有點(diǎn)暈,還是放一個(gè)原文 連接 吧。
這節(jié)主要講了啟動(dòng)一個(gè) Activity 時(shí)如何通過(guò)設(shè)置標(biāo)簽屬性或 startActivity 函數(shù)參數(shù)來(lái)改變它與 Task 和 Back Stack 的關(guān)系。
<activity> 屬性:
- taskAffinity
- launchMode
- allowTaskReparenting
- clearTaskOnLaunch
- alwaysRetainTaskState
- finishOnTaskLaunch
intent flag
- FLAG_ACTIVITY_NEW_TASK
- FLAG_ACTIVITY_CLEAR_TOP
- FLAG_ACTIVITY_SINGLE_TOP
啟動(dòng)模式
通過(guò)標(biāo)簽設(shè)置:
*standard
*singleTop
*singleTask
*singleInstance
通過(guò) flag 設(shè)置:
*FLAG_ACTIVITY_NEW_TASK
*FLAG_ACTIVITY_SINGLE_TOP
*FLAG_ACTIVITY_CLEAR_TOP
Clearing the back stack
當(dāng)用戶(hù)離開(kāi)一個(gè)任務(wù)再回來(lái)時(shí),默認(rèn)情況下清除除了根之外的其他 Activity。要改變這種情況可以設(shè)置 activity 屬性:
*alwaysRetainTaskState
*clearTaskOnLaunch
*finishOnTaskLaunch
Starting task
<activity ... >
<intent-filter ... >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
...
</activity>
當(dāng) launch mode 被設(shè)置成 "singleTask" and "singleInstance" 時(shí)應(yīng)該設(shè)置以上代碼。