我知道可以在清单文件中声明活动,使用“android:excludeFromRecents”排除它们不显示在最近任务列表中:
http://developer.android.com/guide/topics/manifest/activity-element.html#exclude
然而,这并不是我想要的。我想知道是否有一种方法可以通过编程方式将应用程序从最近任务列表中删除。
通常情况下,当您启动一个Activity时,想要为其设置特殊属性,可以向Intent传递特殊标志。在这种情况下,使用FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
标志。
更新:
如果您需要隐藏当前已经运行的Activity,您可以将此标志与FLAG_ACTIVITY_CLEAR_TOP
结合使用,将新的Intent发送到现有的Activity。但是,您需要考虑并进行实验,以了解用户在堆栈中移动时会发生什么以及是否会使您的应用程序重新出现在最近的应用程序中。
可以使用ActivityManager.AppTask
功能来实现此操作(从API 21开始)
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
if(am != null) {
List<ActivityManager.AppTask> tasks = am.getAppTasks();
if (tasks != null && tasks.size() > 0) {
tasks.get(0).setExcludeFromRecents(true);
}
}
将以下行添加到您正在退出应用程序的 Activity 中:
@Override
public void finish() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
super.finishAndRemoveTask();
}
else {
super.finish();
}
}
当您的活动完成并应该关闭时,请调用此方法,并作为任务完成根活动的一部分完全删除任务。
finishAndRemoveTask();
Activity
,在清单中声明为
基本上,当我想让应用程序从最近列表中消失时,我会完成所有其他活动,然后启动XPTO,它基本上会终止应用程序(在其onResume()
中调用android.os.Process.killProcess(android.os.Process.myPid());
)setExcludeFromRecents
时,应用程序就永远从最近使用的应用程序中消失了 - 我不想要这个结果,所以我使用了finishAndRemoveTask
。这是我的代码示例:applicationContext.getSystemService(ActivityManager::class.java).appTasks.firstOrNull { task ->
task.taskInfo.baseActivity?.packageName == applicationContext.packageName
}?.finishAndRemoveTask()