1. android:excludeFromRecents
最常见的方式就是这个excludeFromRecents标签了,它意味着是否应从最近使用的应用列表(即概览屏幕)中排除该 Activity 启动的任务。换言之,当该 Activity 是新任务的根 Activity 时,此属性确定最近使用的应用列表中是否应出现该任务。如果应从列表中排除任务,请设置“true
”;如果应将其包括在内,则设置“false
”。默认值为“false
”。
注意:如果Activity不是任务栈的第一个Activity,设置该标签不会起作用,同理,如果栈内第一个Activity设置了true,栈内其他Activity同样不会出现在最近任务列表里。
2.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS作用和android:excludeFromRecents效果相同,也同样只对栈内第一个Activity生效。
3. setExcludeFromRecents
根据上文可知,android:excludeFromRecents和Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS都只对栈内第一个Activity,这其实是因为该设置真正针对Activity栈,在API21之后,针对Activity栈提供了setExcludeFromRecents方法,可以通过以下方法隐藏自己:
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);
}
}
}
该方式还有一个优点,就是你可以在Activity生命周期的任何时间内改变其在最近任务的可见性,而不是像上面两种只能在栈内第一个Activity启动时改变。