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

时间:2012-11-14 18:48:26

标签: android

我知道可以在清单中声明活动被排除在android:excludeFromRecents的最近时间之外: http://developer.android.com/guide/topics/manifest/activity-element.html#exclude

但是,这不是我想要的,我想知道是否有办法从最近的应用中删除应用以编程方式

7 个答案:

答案 0 :(得分:36)

是的,通常当您希望在启动Activity时拥有特殊属性时,您需要为Intent提供特殊标记。在这种情况下FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

<强>更新

如果您需要隐藏当前已在运行的活动,您可以将此标记与FLAG_ACTIVITY_CLEAR_TOP结合使用,这会将新的Intent发送到现有的Activity。您将不得不考虑并尝试在用户在您的堆栈中移动时会发生什么,以及是否会使您的应用重新出现在最近的应用中。

答案 1 :(得分:30)

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

添加新活动

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);
    }
}

现在退出 来自其他活动

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

完成

答案 2 :(得分:13)

这可以使用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);
        }
    }

答案 3 :(得分:10)

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

  

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

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

答案 4 :(得分:6)

将这些行添加到退出应用程序的Activity:

@Override
public void finish() {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        super.finishAndRemoveTask();
    }
    else {
        super.finish();
    }
}

答案 5 :(得分:3)

在您的活动完成后调用此应该关闭,并且应该在完成任务的根活动时完全删除任务。

finishAndRemoveTask();

答案 6 :(得分:2)

在收到其他答案后,我设法得到以下解决方法:我有一个Activity,我们称之为XPTO,在清单中声明

基本上,当我希望app从最近的列表中消失时,我完成所有其他活动,然后启动XPTO,这基本上会杀死应用程序(在android.os.Process.killProcess(android.os.Process.myPid()); onResume() >

如果有人有更好的方法,请分享