在我的应用程序中,当我单击后退按钮时,它会通过我之前打开它们的所有活动,我使用public void onBackPressed()
方法将后退按钮返回到我想要的活动,如下所示< / p>
public void onBackPressed()
{
startActivity(new Intent("com.MyDiet.Main"));
Tracker.this.finish();
}
是真正安全地编写后退按钮的方法吗?如何在按下后退按钮时阻止应用程序通过所有先前打开的活动?当我点击主要活动中的后退按钮时,我如何让应用程序退出?
答案 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 lifecycle和back 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();
}