1. android:excludeFromRecents
最常見(jiàn)的方式就是這個(gè)excludeFromRecents標(biāo)簽了,它意味著是否應(yīng)從最近使用的應(yīng)用列表(即概覽屏幕)中排除該 Activity 啟動(dòng)的任務(wù)奕枢。換言之提佣,當(dāng)該 Activity 是新任務(wù)的根 Activity 時(shí)务傲,此屬性確定最近使用的應(yīng)用列表中是否應(yīng)出現(xiàn)該任務(wù)倔矾。如果應(yīng)從列表中排除任務(wù),請(qǐng)?jiān)O(shè)置“true
”囚似;如果應(yīng)將其包括在內(nèi)闻伶,則設(shè)置“false
”潮太。默認(rèn)值為“false
”。
注意:如果Activity不是任務(wù)棧的第一個(gè)Activity虾攻,設(shè)置該標(biāo)簽不會(huì)起作用,同理更鲁,如果棧內(nèi)第一個(gè)Activity設(shè)置了true霎箍,棧內(nèi)其他Activity同樣不會(huì)出現(xiàn)在最近任務(wù)列表里。
2.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS作用和android:excludeFromRecents效果相同澡为,也同樣只對(duì)棧內(nèi)第一個(gè)Activity生效漂坏。
3. setExcludeFromRecents
根據(jù)上文可知,android:excludeFromRecents和Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS都只對(duì)棧內(nèi)第一個(gè)Activity媒至,這其實(shí)是因?yàn)樵撛O(shè)置真正針對(duì)Activity棧顶别,在API21之后,針對(duì)Activity棧提供了setExcludeFromRecents方法拒啰,可以通過(guò)以下方法隱藏自己:
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
if (am != null) {
List<ActivityManager.AppTask> tasks;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
tasks = am.getAppTasks();
if (tasks != null && tasks.size() > 0) {
tasks.get(0).setExcludeFromRecents(exclude);
}
}
}
該方式還有一個(gè)優(yōu)點(diǎn)驯绎,就是你可以在Activity生命周期的任何時(shí)間內(nèi)改變其在最近任務(wù)的可見(jiàn)性,而不是像上面兩種只能在棧內(nèi)第一個(gè)Activity啟動(dòng)時(shí)改變谋旦。