关于在最近任务列表中隐藏Activity

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启动时改变。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。