如何在主活动中按回按钮时退出应用程序?

时间:2012-05-31 15:09:27

标签: java android

在我的应用程序中,当我单击后退按钮时,它会通过我之前打开它们的所有活动,我使用public void onBackPressed()方法将后退按钮返回到我想要的活动,如下所示< / p>

public void onBackPressed()
  {
    startActivity(new Intent("com.MyDiet.Main"));
    Tracker.this.finish();
  }

是真正安全地编写后退按钮的方法吗?如何在按下后退按钮时阻止应用程序通过所有先前打开的活动?当我点击主要活动中的后退按钮时,我如何让应用程序退出?

4 个答案:

答案 0 :(得分:1)

在您的应用程序和所有Android应用程序中,除非必须通过不必要的步骤(例如登录,如果您已经登录),否则非常重要的是不要覆盖Android标准行为。用户通常会抱怨Android应用没有共同的行为或风格指南。

无论如何,是的,你可以在你的所有活动上覆盖onBackPressed并做任何你想做的事情。但就是不要。

答案 1 :(得分:0)

这种方法并不好,因为您污染了应用程序的活动堆栈

示例:

当前堆栈:MainAct - &gt; Act2 - &gt; Act3(我们正在进行活动3)

使用上面的代码,当您按下时,堆栈现在看起来如下:

MainAct - &gt; Act2 - &gt; MainAct

因为你结束了Act3并发起了一项新的主要活动,这可能不是你想要的。

要实现您想要的(当前活动结束时返回主页)您需要处理中间活动:在上面的示例中,当您从Act2调用startActivity(“Act3”)时,您应该调用“ this.finish()”。因此,您不必覆盖活动3的“onBackPressed()”:只是默认值将终止Act3,堆栈中的下一个活动将是MainAct

MainAct - &gt; A2(A2启动A3,然后调用this.finish())

MainAct - &gt; A3(用户现在按下)

MainAct(主要活动现在位于顶部)

总而言之,您不必覆盖onBackPressed,您只需正确管理主要活动与当前活动之间活动的生命周期。

答案 2 :(得分:0)

一般来说,不建议让事情像用户所期望的那样工作,这被认为是非常糟糕的做法。这就是为什么从覆盖onBackPressed()开始活动是不好的。

默认情况下,当用户按下时,活动将完成,并且将显示back stack中的一个。您作为开发人员(通过编写代码)决定哪一个是。你可以这样做,但是后来(或者对于其他人来说)它会有点混乱,很难找到这个不寻常的地方代码开始其他活动。

所以..阅读activity lifecycleback stack以了解其工作原理并更好地理解术语会很有用。

如果您希望自己的某项活动不留在后台,则可以为该活动添加manifest file文件android:noHistory="true"

通过在开始活动时向intent添加适当的标记,您可以从代码中实现同样的事情:Intent.FLAG_ACTIVITY_NO_HISTORY

当用户“离开”来自 ActivityOne (使用意图启动或在{{}}中定义时如此描述),到新的 ActivityTwo ,然后按回来,不会去ActivityOne,因为它不会在后台堆栈。使用此功能,您可以精确控制活动的导航。

manifest可供使用,但我想这是您想要实现的目标。

希望你会发现我的答案很有用。干杯..

答案 3 :(得分:0)

你可以使用很多技巧退出你的complet应用程序我使用这个开始一个意图,然后从androidmanifest我选择类别到家,而不是关闭当前活动,这将是你的主要活动!

public void onBackPressed() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    finish();
}