繁体   English   中英

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

[英]how to make the appliction exit when pressing back button in the main activity?

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

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

那是编码后退按钮的真正安全的方法吗? 当按下后退按钮时,如何防止应用程序通过所有先前打开的活动? 在主活动中单击后退按钮时如何退出应用程序?

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

不管怎样,是的,您可以在所有活动上覆盖onBackPressed并执行您想做的任何事情。 但就是不要。

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

例:

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

在上面的代码中,当您按回车时,堆栈现在如下所示:

MainAct-> Act2-> MainAct

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

要实现您想要的目标(当前活动结束后返回主界面),您需要进行中间活动:在上面的示例中,当从Act2调用startActivity(“ Act3”)时,应调用“ this.finish ()”。 因此,您不必重写活动3的“ onBackPressed()”:只需默认值即可终止Act3,而堆栈中的下一个活动将是MainAct

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

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

MainAct(mainactivity现在位于顶部)

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

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

默认情况下,当用户按下后退时,活动将结束,并且将显示后退堆栈中的一个。 作为开发人员,您将(通过编写代码)决定是哪一个。 您可以通过这种方式进行操作,但是稍后(或对其他人而言)将很难找到这个异常的地方来启动其他活动。

因此,阅读有关活动生命周期后退堆栈的信息将很有帮助,以了解其工作原理并更好地理解术语。

如果您不希望一项活动留在堆栈上,则可以为该活动添加manifest file文件android:noHistory="true"

通过在启动活动时向意图添加适当的标志,可以从代码中实现相同的目的: Intent.FLAG_ACTIVITY_NO_HISTORY

当用户从ActivityOne (使用意图开始或在manifest定义)“离开”到新的ActivityTwo ,然后按Back时,它将不会转到ActivityOne,因为它不会放在堆栈上。 使用此功能,您可以精确控制整个活动的导航。

可以使用更多的标志 ,但是我想这是您想要实现的。

希望您会发现我的回答有用。 干杯..

对于我来说,您可以使用很多技巧来退出您的complet应用程序,我会以此为出发点,然后从androidmanifest中选择类别归类,然后关闭当前活动,这将是您的mainactivity!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM