我有一个Android应用程序,并有几个活动。我需要为每个活动或特定活动提供按钮,以允许关闭应用程序,而无需返回以前的活动或在后台运行。 我试过了
finish();
System.exit(0);
组合和单独组合它不起作用,但关闭当前活动并导航到之前的活动。
我查看了以下问题的代码
答案 0 :(得分:1)
首先,在Android中没有推荐使用退出按钮,因为它不是预期用户体验的一部分。
但是如果你真的需要它,那么你可以用含有额外内容的意图来调用你的家庭活动,例如:
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
intent.putExtra("FORCE_EXIT", true);
最后在你的家庭活动中,当处理意图时(在onNewIntent()方法中),如果设置了“ForceExit”额外,则完成活动。
FLAG_ACTIVITY_CLEAR_TOP已完全清除堆栈,然后您的应用将停止。
答案 1 :(得分:1)
对大多数情况最有效的推荐方法是仅使用1个Activity,使用片段进行内容显示和逻辑。
这样您只需要finish()
主要活动,因为它将按设计控制应用程序生命周期。
您将拥有许多其他好处,例如依赖项控制和可重用性,以及内置功能,如使用片段事务的动画,同时可以保留片段后台堆栈,您可以根据预期的用户交互进行相应管理强大>并且不会影响通过在您的主机活动上调用finish()
来完成应用的便捷性。
您可以做的另一件事是在启动新活动之前标记这样的意图:intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
。
通过这种方式,您可以保持背部轨迹清洁,从而在用户按下后退按钮或从任何事件中调用finish()
时完成应用程序。然而,使用旗帜气馁并被认为是不好的做法。
答案 2 :(得分:1)
这可能是解决问题的黑客行为。但我刚刚制作了一个应用程序并测试了我的代码,它运行正常。
您需要创建一个名为QuitActivity的新活动或任何您想要命名的活动,当您想要完成应用程序或退出应用程序时,您必须使用此代码启动该活动
Intent i = new Intent(getApplicationContext(), QuitActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
this.finish();
然后这是我的退出活动代码,它只会在清除逆向堆栈后自行关闭,以便您的应用程序退出。
public class QuitActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.finish();
}
}
希望这会对你有所帮助。
答案 3 :(得分:0)
答案 4 :(得分:0)
首先完成当前Activity
,然后通过此代码移至下一个
startActivity(intent);
Classname.this.finish();
第二件事就是覆盖onBackPressed
@Override
public void onBackPressed() {
//do nothing
}
答案 5 :(得分:0)
仅键入System.exit(0); 或者创建静态布尔值needToExit; set needToExit = true;
你打电话的地方
finish();
System.exit(0);
在所有其他活动中覆盖onresume
public void onResume(){
super.onResume();
if (MySettingsClass.needToExit){
finish();
System.exit(0);
return;
}
//your other code;
}
答案 6 :(得分:0)
我在这里使用flags或System.exit(0)尝试了一些答案,但对我来说它要么不起作用,要么导致奇怪的行为。有时它会杀死应用程序,但然后立即重新启动它。我意识到我应该使用请求和结果代码更多地采用标准方式。
基本上,在您的父活动中,使用以下命令启动您的子活动:
startActivityForResult(new Intent(this, ChildActivity.class), CHILD_ACTIVITY_REQUEST_CODE);
其中CHILD_ACTIVITY_REQUEST_CODE只是一个常量(静态最终)整数。然后在您的子活动中,当他们按退出按钮时,使用以下命令完成活动:
setResultAndFinish(RESULT_CODE_EXIT);
其中RESULT_CODE_EXIT是另一个常量(静态最终)整数。然后回到父活动中,处理结果代码并完成父活动:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CHILD_ACTIVITY_REQUEST_CODE) {
if(resultCode != ChildActivity.RESULT_CODE_EXIT) {
finish();
return;
}
}
}