![](/img/trans.png)
[英]How to make media player stop when pressing device back button from a fragment back to activity
[英]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.