我知道活动可以在清单中声明为从最近的活动中排除:http android:excludeFromRecents
:
//developer.android.com/guide/topics/manifest/activity-element.html#exclude
但是,这不是我想要的,我想知道是否有办法以编程方式从最近的应用程序中删除该应用程序
我知道活动可以在清单中声明为从最近的活动中排除:http android:excludeFromRecents
:
//developer.android.com/guide/topics/manifest/activity-element.html#exclude
但是,这不是我想要的,我想知道是否有办法以编程方式从最近的应用程序中删除该应用程序
是的,通常当您希望Activity
在启动时具有特殊属性时,您需要为Intent
. 在这种情况下FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
。
更新:
如果您需要隐藏当前已经运行的活动,您可以结合使用此标志,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();
}
}
以下是标志的定义android:excludeFromRecents
(我知道你已经看到了):
此活动启动的任务是否应从最近使用的应用程序(“最近的应用程序”)列表中排除。也就是说,当这个activity是一个新任务的根activity时,这个属性决定了这个task是否不应该出现在最近的应用列表中。如果任务应从列表中排除,则为“true”;“假”,如果它应该被包括在内。默认值为“假”。
因此,要从最近应用程序列表中删除该应用程序,您可以在应用程序中的第一个活动上设置此标志,因为该活动会为您的应用程序启动任务。如果您的应用程序中有多个任务(对于大多数应用程序来说不太可能),那么您需要为所有任务的根活动设置此标志。
当您的活动完成并应该关闭时调用它,并且作为完成任务的根活动的一部分,该任务应该被完全删除。
finishAndRemoveTask();
在收到其他答案后,我设法找到了以下解决方法:我有一个Activity
,我们称之为 XPTO,在清单中声明为
基本上,当我希望应用程序从最近列表中消失时,我完成所有其他活动,然后启动 XPTO,这基本上会杀死应用程序(调用android.os.Process.killProcess(android.os.Process.myPid());
它的onResume()
如果有人有更好的方法,请分享