如何退出Android应用程序

时间:2014-07-30 08:04:14

标签: android android-activity quit

我有一个Android应用程序,并有几个活动。我需要为每个活动或特定活动提供按钮,以允许关闭应用程序,而无需返回以前的活动或在后台运行。 我试过了

finish();
System.exit(0);

组合和单独组合它不起作用,但关闭当前活动并导航到之前的活动。

我查看了以下问题的代码

Need code for exit from app in android

7 个答案:

答案 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)

使用:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

开始新活动时,如API Documentation

中所述

答案 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;
        }
   }
}