退出安卓应用程序

3
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

并使用这种方法。
moveTaskToBack(true);

我正在开发一个应用程序,在最后一个活动中需要退出它,我已经使用了上述方法来退出应用程序,但问题是它仅退出该活动,应用程序在后台运行(在任务管理器中可见)。每当我再次加载应用程序时,它都会从我退出的地方重新开始(即最后一个活动)。
有没有可以完全退出并从后台(任务管理器)中删除的代码?
提前致谢。

1
你应该在清单文件中更改Activity的行为。了解SingleInstance、SingleTop等内容。 - RvdK
9个回答

5

要退出应用程序,请通过以下方式返回到根活动(即启动器启动的第一个活动):

Intent intent = new Intent(this, MyRootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("exit", "true");
startActivity(intent);

这将清除任务栈,并将此intent重新启动根活动。
在你的根活动中,在onCreate()方法中,你需要根据intent中的额外信息来决定是否退出,像这样:
Intent intent = getIntent();
if (intent.hasExtra("exit")) {
    // User wants to exit
    finish();
}

您还提到了从任务管理器中删除应用程序的事情。如果您指的是“最近使用的应用程序列表”,那么这不是“正在运行的应用程序列表”,而是用户最近使用的应用程序列表。仅因为您的应用程序显示在该列表中并不意味着它正在运行。
如果您真的希望您的应用程序不出现在“最近使用的应用程序列表”中,请在根活动的清单条目中添加以下内容:
android:excludeFromRecents="true"

1

为什么你不直接使用呢?

this.finish()

?


1

如果您不想调用 finish();,那么您也可以添加

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

使用

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

请注意,Intent.FLAG_ACTIVITY_CLEAR_TASK 仅适用于 API 11(Android 3.0)及以上版本。 - David Wasser

1

使用此代码开始您的最后一个活动,以清除所有活动堆栈。当您按下返回按钮或调用finish()时,它将退出该活动。

Intent intent = new Intent(this, YourActivityD.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

请注意,FLAG_ACTIVITY_CLEAR_TASK只适用于API 11及以上版本
更多信息请参见:http://developer.android.com/guide/components/tasks-and-back-stack.html


0
这是我的可用代码
在你的退出按钮上:
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
mainIntent.putExtra("close", true);
startActivity(mainIntent);
finish();

这段代码是用来关闭其他活动并将MainActivity置于顶部的。 现在在你的MainActivity中:

if( getIntent().getBooleanExtra("close", false)){
    finish();
}

0
当您调用startActivity(intent);时,请在其后添加finish();以关闭旧活动(除非您希望将来返回该活动)。
因此,您的代码将如下所示:
startActivity(intent);  
finish();  

0

试试这个:

Intent finishapp = new Intent(Intent.ACTION_MAIN);
finishapp.addCategory(Intent.CATEGORY_HOME);
finishapp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(finishapp);

我无法理解你所做的更改,除了将变量intent重命名为finishapp。 - MysticMagicϡ
我没有注意到。我从我的项目中复制代码,它对我有效。我使用这段代码关闭第二个活动的应用程序。 - m0zgen

0

你必须通过调用来完成该活动

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(intent);
   activity.this.finish();

或者您可以在您的活动中调用destroy方法

   @Override     
   public void onDestroy()
    {
      super.onDestroy();
      finish();
     }

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接