0

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

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

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

4

4 回答 4

1

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

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

于 2012-05-31T15:13:23.203 回答
0

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

例子:

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

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

MainAct -> Act2 -> MainAct

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

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

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

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

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

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

于 2012-05-31T15:30:15.893 回答
0

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

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

所以..阅读活动生命周期后台堆栈以了解它是如何工作的并更好地理解术语会很有用。

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

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

当用户从ActivityOne(开始使用意图或定义的manifest类似描述)“离开”到新的ActivityTwo然后按回时,它不会转到 ActivityOne,因为它不会在后堆栈上。使用它,您可以精确控制活动的导航。

有更多的标志可供使用,但我想这就是你想要实现的。

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

于 2012-05-31T15:40:01.573 回答
0

你可以使用很多技巧来退出你的完整应用程序,我使用这个启动一个意图,然后从 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();
}
于 2016-02-10T16:16:33.553 回答