System.exit(0)不能关闭所有的活动吗?

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

2
在你的Activity1中,在启动Activity2之后调用finish()。 - Anukool
退出一个应用程序,这是不被赞同的吗?建议不要使用System.exit(0)。 - Raghunandan
1
@Anukool,如果用户按返回键而不是按钮,则无法起作用。 - MaciejGórski
@MaciejGórski:是的,你说得对。 - Anukool
最佳实现方式是通过https://dev59.com/OHA75IYBdhLWcg3wkJ71#9735524(其中一个答案中提到的方法)。或者您可以使用MaciejGórski的建议,使用`startActivityForResult()`从ActivityA调用ActivityB。 - David Wasser
修改了这篇文章,请查看。 - anon
6个回答

7
不要使用System.exit
如果您希望用户从任何Activity关闭应用程序,建议使用startActivityForResult,在第一个Activity中检查返回的值,并在那里调用finish()

3
为什么finish方法不会关闭应用程序,只会关闭活动?人们需要理解我们有许多其他类不是从Activity派生的。它们可能用于自动化数据库连接、存储登录ID、用户名、最后查询结果等等。因此,在生产环境中关闭活动并不能解决问题。Aaa,你好Maciek ;) - TomeeNS

4

你可以模拟点击主页按钮:

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

但这不会关闭应用程序...

要关闭它,您可以按照https://dev59.com/OHA75IYBdhLWcg3wkJ71#9735524的方法进行操作。


1
打开HOME应用程序不会改变此任务的当前状态。这意味着,使用此示例,当用户再次从HOME屏幕启动此应用程序时,它将将现有任务(包含Activity1和Activity2)带回前台并显示给用户Activity2(这可能不是OP想要的结果)。链接的解决方案更好。 - David Wasser

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

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


注:Original Answer翻译成“最初的回答”。

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" />

0

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


0

通过在按钮点击后传递意图以启动下一个活动,调用 finish(); 来完成第一个活动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接