Android 最近任务列表中隐藏图标

3,847 阅读1分钟

在某些场景下,希望将启动的activity隐藏,可以使用以下三种方式解决。 在最近任务列表隐藏后,清理最近任务,将无法清理我们的APP应用

1. android:excludeFromRecents

在AndroiManifest.xml中配置,它意味着是否应从最近使用的应用列表(即概览屏幕)中排除该 Activity 启动的任务。该 Activity 是新任务的根 Activity 时,此属性确定最近使用的应用列表中是否应出现该任务。如果应从列表中排除任务,请设置“true”;如果应将其包括在内,则设置“false”。默认值为“false”。 注意:如果Activity不是任务栈的第一个Activity,设置该标签不会起作用,同理,如果栈内第一个Activity设置了true,栈内其他Activity同样不会出现在最近任务列表里。

    <activity
        android:name="com.example.statemachine.MainActivity"
        android:excludeFromRecents="true"
        android:taskAffinity=":splash">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>

2.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS作用和android:excludeFromRecents效果相同,也同样只对栈内第一个Activity生效。可以针对

val intent = Intent(context, SettingActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
context.startActivity(intent)

3. setExcludeFromRecents

developer.android.com/reference/a…

根据上文可知,android:excludeFromRecents和Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS都只对栈内第一个Activity,这其实是因为该设置真正针对Activity栈,在API21之后,针对Activity栈提供了setExcludeFromRecents方法。

val am = applicationContext.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
am?.let {
    val tasks = it.appTasks
    if (!tasks.isNullOrEmpty()) {
        tasks[0].setExcludeFromRecents(true)
    }
}

以上方法,可以通过taskAffinity配合,实现指定某个任务栈下的所有activity不可见