需求
最近任務欄即Recents界面。
系統默認是一個應用在Recents界面顯示為一個任務。項目的多媒體應用中集成了“音樂” “視頻” “藍牙音樂” “AUX”“IPOD”等功能,需要在最近任務欄中將每個功能單獨顯示為獨立的任務。
解決辦法
Android5.0(API level21)中引入了“document-centric”模式,可以做到如下兩件事情:
1.同一個Activity的多個實例可以在最近任務欄中顯示為多個任務;
2.同一個應用的不同Activity可以在最近任務欄中顯示為獨立的任務;
實現方式
1.在startActivity()方法中添加Flag(FLAG_ACTIVITY_NEW_DOCUMENT);
public void createNewDocument(View view) {
final Intent newDocumentIntent = newDocumentIntent();
if (useMultipleTasks) {
newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
}
startActivity(newDocumentIntent);
}
private Intent newDocumentIntent() {
boolean useMultipleTasks = checkbox.isChecked();
final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++);
return newDocumentIntent;
}
}
注意:使用 FLAG_ACTIVITY_NEW_DOCUMENT 標記啟動的 Activity 必須在清單中設置 android:launchMode="standard" 屬性值(默認值)。
如果添加了FLAG_ACTIVITY_MULTIPLE_TASK,則每次都會新建一個新的任務;
判斷流程是這樣的:當主Activity啟動一個新Activity時,首先會去從任務列表中去查找此任務,如果沒找到或者有FLAG_ACTIVITY_MULTIPLE_TASK這個flag,則會新建一個任務;如果找到該任務,則將該任務帶到最前端,并將新Intent傳到onNewIntent()。
2.在AndroidManifest.xml的<activity>設置屬性行為;
Activity可以在其清單文件中使用<activity>屬性 android:documentLaunchMode指定始終啟動到新任務,該屬性有四個值,含義分別如下所示:
"intoExisting"
Activity復用已有的任務,等價于設置了FLAG_ACTIVITY_NEW_DOCUMENT但沒有設置FLAG_ACTIVITY_MULTIPLE_TASK;
"always"
Activity總是創建一個新任務,等價于同時設置了FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK;
"none"
不會創建新任務;默認值;
"never"
不會創建新任務,同時會覆蓋在startActivity時設置的FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK的flag;
總結:設置為“intoExisting”能夠滿足需求。
移除任務
1.設置<activity>的屬性值android:excludeFromRecents為true,則該任務不會顯示在最近任務欄;
2.設置<activity>的屬性值android:maxRecents,設置同一個應用的最大任務數,默認16,有效范圍1-50,低內存設備是1-25;
3.可在Activity中調用finishAndRemoveTask()方法結束任務和從最近任務欄中移除任務;
保留任務
添加Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS的flag或者
<activity>屬性值FLAG_ACTIVITY_RETAIN_IN_RECENTS設為false;
參考文檔
[官方地址](https://developer.android.google.cn/guide/components/activities/recents?hl=en)
[示例代碼地址](https://github.com/android/user-interface-samples/tree/master/DocumentCentricApps)