以编程方式从最近的应用中删除应用

我知道活动可以在清单中声明为从android:excludeFromRecents被排除在android:excludeFromRecents : http : //developer.android.com/guide/topics/manifest/activity-element.html#exclude

但是,这不是我正在寻找,我想知道是否有一种方法来从程序中删除最近的应用程序的应用程序

是的,一般来说,当你想在开始的时候有一个Activity有特殊的属性的时候,你可以给Intent提供特殊的标志。 在这种情况下FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

更新:

如果您需要隐藏当前正在运行的活动,则可以将此标志与FLAG_ACTIVITY_CLEAR_TOP结合使用,以便将新Intent发送到现有活动。 您将不得不思考,也许会尝试用户在您的堆栈中移动时发生的情况,以及是否会使您的应用重新出现在最近的应用中。

我以最简单的方式做到了这一点:

添加新活动

 public class ExitActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(android.os.Build.VERSION.SDK_INT >= 21) { finishAndRemoveTask(); } else { finish(); } } public static void exitApplicationAndRemoveFromRecent(Context context) { Intent intent = new Intent(context, ExitActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_ANIMATION); context.startActivity(intent); } } 

现在退出 其他Activity

 @Override public void onBackPressed() { ExitActivity.exitApplicationAnRemoveFromRecent(OtherActivity.this); super.onBackPressed(); } 

完成

以下是标志android:excludeFromRecents (我知道你已经看到)的定义:

是否应该从最近使用的应用程序列表(“最近的应用程序”)中排除此活动启动的任务。 也就是说,当此活动是新任务的根活动时,此属性将确定该任务是否不应出现在最近的应用程序列表中。 如果任务被排除在名单之外,则为“真” 如果应该包括“假”的话。 默认值是“false”。

所以要从最近的应用程序列表中删除应用程序,您可以在应用程序的第一个活动中设置此标志,因为该活动会为您的应用程序启动任务。 如果您的应用程序中有多个任务(对大多数应用程序来说不太可能),那么您需要将此标志设置为所有任务的根活动。

这可以使用ActivityManager.AppTaskfunction(从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 ,让我们称之为XPTO,声明在清单

基本上,当我想要应用程序从最后清单消失,我完成了所有其他活动,然后启动XPTO,基本上杀死应用程序(调用android.os.Process.killProcess(android.os.Process.myPid());在其onResume()

如果有人有这样做的更好的方式,请分享它