Java 在主活动中按下后退按钮时,如何使应用程序退出?

Java 在主活动中按下后退按钮时,如何使应用程序退出?,java,android,Java,Android,在我的应用程序中,当我单击“后退”按钮时,它会通过我之前打开的所有活动,我使用public voidonBackPressed()方法使后退按钮返回到我想要的活动,如下所示 public void onBackPressed() { startActivity(new Intent("com.MyDiet.Main")); Tracker.this.finish(); } 这是对后退按钮进行编码的正确且安全的方法吗?当按下后退按钮时,如何防止应用程序通过所有以前打开的活

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

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

这是对后退按钮进行编码的正确且安全的方法吗?当按下后退按钮时,如何防止应用程序通过所有以前打开的活动?当我单击主活动中的后退按钮时,如何使应用程序退出

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


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

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

例如:

当前堆栈:MainAct->Act2->Act3(我们在活动3中)

使用上面的代码,按back键时,堆栈现在看起来如下所示:

MainAct->Act2->MainAct

因为你结束了Act3并启动了一个新的主要活动,这可能不是你想要的

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

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

MainAct->A3(用户现在按back)

MainAct(mainactivity现在位于顶部)


总而言之,您不必重写onBackPressed,您只需正确管理主活动和当前活动之间的活动生命周期。

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

默认情况下,当用户按“上一步”时,“活动”将完成,并显示一个。作为开发人员,您将(通过编写代码)决定使用哪一种。您可以这样做,但稍后(或对其他人来说)将有点混乱,很难找到这个不寻常的地方来存放正在启动其他活动的代码

因此,阅读并了解它的工作原理和更好地理解术语是非常有用的

如果您不想让某个活动停留在后台堆栈上,可以为该活动添加文件
android:noHistory=“true”

通过在开始活动时向意图添加适当的标志,您可以从代码中实现同样的效果:
intent.flag\u activity\u NO\u HISTORY

当用户“离开”ActivityOne(开始使用intent或在类似描述中定义)到新ActivityTwo,然后按back时,它不会转到ActivityOne,因为它不会在后堆栈上。使用此功能,您可以通过活动精确控制导航

都可以使用,但我想这就是你想要实现的


希望我的回答对你有用。干杯。

您可以使用许多技巧退出您的完整应用程序。我使用此启动意图,然后从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();
}

如果对于主活动,您指的是当前显示的活动,则只需在每个startActivity/startActivityForResulti之后调用activity.finish(),即主活动基本活动“启动屏幕后的第一个午餐活动”,我不想用退出按钮来退出应用程序,而是想在后面的按钮上这样做。为什么?这会影响活动信息吗?他说的是用户的期望。。在这种情况下,用户可能不知道您是如何编写代码的,甚至可能不会注意到任何异常情况(如果您已经从
Main
进入
Tracker
),但从onBackPressed开始活动并不常见,因此其他开发人员或您在几个月后将遇到代码和应用程序流程方面的问题顺便说一句,要在应用程序中实现所需的UI行为或效果,应遵循标准规则和用户期望,但有时我们需要覆盖某些方法。非常感谢,它非常有用,我想知道以下哪种方法是退出应用程序的最佳方法:添加退出菜单项以退出应用程序,还是在单击后退按钮时让应用程序正常退出?你能在这方面帮我吗?你可以在尝试时覆盖onBackPressed,只需稍微更改一下排除
startActivity(newintent(“com.MyDiet.Main”)行。。比如说:
public void onBackPressed(){Tracker.this.finish();}
要添加退出菜单的其他选项将具有相同的
finish()
调用。因此,这两种方法都有相同的结果,并不是不寻常的做法。然而,你可能有兴趣阅读@RetoMeier关于后退按钮和退出应用程序的帖子。他是谷歌安卓系统的主要工程师之一,他建议由安卓系统来处理这些事情。有些人同意,有些人不同意。。