System.exit(0)没有关闭我的所有活动?

时间:2013-05-10 11:05:18

标签: android android-activity

我有2个活动,所以活动1转到活动2然后活动2我有一个退出按钮。但是当我点击它时,它只退出活动编号2并再次返回活动1。它基本上感觉就像我刚刚启动应用程序。我不确定为什么?

这是我的代码。

Button btExit = (Button) findViewById(R.id.btExit);
    btExit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
            System.exit(0);
        }
    });

7 个答案:

答案 0 :(得分:43)

System.exit(0);

是终止Android应用程序的坏方法。 Android在自己的操作系统中管理它

您可以通过相应的Intent:

调出Home应用程序
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

希望这会有所帮助

编辑: -

然后我想你的目标是完成所有堆积的活动..

这是: -

按以下步骤结束所有以前的活动:

Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("Exit me", true);
startActivity(intent);
finish();

然后在 MainActivity onCreate()方法中添加此内容以完成MainActivity

if( getIntent().getBooleanExtra("Exit me", false)){
    finish();
}

结果将与上述相同,但由于所有堆叠活动都已关闭,当您回到应用程序时,它必须从您的主要活动开始,即启动器活动。

希望这有帮助。

答案 1 :(得分:7)

请勿使用System.exit

如果您希望用户关闭来自任何Activity的应用,我建议您使用startActivityForResult,先检查onActivityResultActivity的返回值并在其中调用finish()

答案 2 :(得分:4)

您可以模拟按下主页按钮:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

但这不会关闭应用 ..

关闭,您可以https://stackoverflow.com/a/9735524/1434631

答案 3 :(得分:0)

使用finish()和sharedPreference标志,并在单击按钮时设置标志。在你的其他活动上,检查标志并完成()如果设置了标志

答案 4 :(得分:0)

在传递意图后开始下一个活动,在按钮上调用finish();完成第一个活动。

答案 5 :(得分:0)

System.exit(0)不适用于关闭应用程序

  ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    am.killBackgroundProcesses("com.root.abc");

    System.runFinalizersOnExit(true);
    System.exit(0);


add Manifest permission
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

答案 6 :(得分:0)

使用
 finishAffinity();退出应用程序。

finish()只会从活动堆栈中清除活动。