11

我有 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);
        }
    });
4

7 回答 7

47
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();
}

结果将与上面相同,但是因为所有堆积的活动都已关闭,所以当您返回应用程序时,它必须从您的主要活动开始,即启动器活动。

希望这可以帮助。

于 2013-05-10T11:09:13.807 回答
7

不要使用System.exit.

如果您希望用户从Activity我建议使用的任何应用程序中关闭应用程序startActivityForResult,请首先检查返回值并onActivityResult在那里Activity调用finish()

于 2013-05-10T11:10:04.523 回答
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

于 2013-05-10T11:11:46.033 回答
2

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

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

于 2019-02-25T06:56:53.560 回答
1

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" />
于 2016-12-29T12:55:00.060 回答
0

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

于 2013-05-10T11:12:29.590 回答
0

finish();在传递启动下一个活动的意图后,通过调用 buttonclick 来完成第一个活动。

于 2013-05-10T11:42:55.287 回答