使用System.exit(0)强制退出Android应用程序无效。

4

当我尝试通过覆盖Android设备上后退按钮的功能并使用"System.exit(0)"来退出我的Android应用程序时,这并不起作用。

我有一个名为"LoginActivity"的活动和一个名为"OverviewActivity"的活动。

当我在OverviewActivity中启动一个意图以切换到LoginActivity时,这是有效的。

Intent changeViewIntent = new Intent(OverviewActivity.this,
            LoginActivity.class);
startActivity(changeViewIntent);

现在我在LoginActivity中,有一个被重写的方法:

@Override
public void onBackPressed() {
    System.exit(0);
}

但是,当我按下返回键(例如在设备模拟器中)时,屏幕会空白一毫秒,然后回到OverviewActivity。
为什么会这样?我只想在按下返回键时强制关闭。
在清单文件中禁用OverviewActivity的历史记录不是一个选择,因为有几种方法可以从其他活动访问OverviewActivity。
也许有什么想法?Android 4是最低要求,所以它不必在低版本上工作。
谢谢!

相关:https://dev59.com/qHI-5IYBdhLWcg3wCztn - Celeo
同样相关 - Alexander Kohler
谢谢,已添加答案。这是两个问题的结合,起作用了。 - Maarkoize
2个回答

4
删除整个活动调用历史记录并启动主屏幕的主屏幕活动即可退出。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

-1
你可以做的是: 在你的OverviewActivity中:
Intent changeViewIntent = new Intent(OverviewActivity.this,
            LoginActivity.class);
startActivity(changeViewIntent);
OverviewActivity.this.finish();

在启动意图后,您终止了概述活动

并且在 LoginActivity 中

@Override
public void onBackPressed() {
    LoginActivity.this.finish();

}

这样你的应用程序将退出。

finish()System.exit(0)之间的区别

虚拟机停止进一步执行,程序将退出。

现在,在您的情况下,由于活动堆栈,第一个活动会回来。

因此,当您使用Intent从一个活动移动到另一个活动时,请像这样完成当前活动的finish()

如果您想强制退出,可以使用

        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(0);
        getParent().finish();

但是你不应该使用System.exit,特别是如果你的活动在后台使用其他资源,例如互联网、视频等。


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