使用 System.exit(0) 强制退出 Android 应用程序不起作用

Posted

技术标签:

【中文标题】使用 System.exit(0) 强制退出 Android 应用程序不起作用【英文标题】:Force quit of Android App using System.exit(0) doesn't work 【发布时间】:2015-01-18 22:47:09 【问题描述】:

当我尝试通过覆盖 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 的历史记录,因为有多种方法可以从其他 Activity 访问 OverviewActivity。

也许有一个想法? Android 4 是最低要求,因此它不必在较低版本上运行..

谢谢!

【问题讨论】:

相关:***.com/questions/2042222/… Also relevant 谢谢,添加了答案。它结合了这两个问题。 【参考方案1】:

可以通过删除整个activity-call-history并启动Home-Scrren的Home-Activity来退出。

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

【讨论】:

【参考方案2】:

你能做的是

在您的 OverviewActivity 中:

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

在启动 Intent 后终止概览活动

在 LoginActivity 中

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


这样你的应用就会退出。

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

VM 停止进一步执行,程序将退出。

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

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

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

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

但您不应该使用System.exit,尤其是当您的活动在后台使用其他资源时,例如网络、视频等

【讨论】:

以上是关于使用 System.exit(0) 强制退出 Android 应用程序不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 java 中使用 System.exit(0) 退出程序

System.exit(0) 导致 Activity 在应用启动时快速退出

Android 怎么退出整个应用程序

试图弄清楚如何使用字符退出 System.exit

system.exit system.exit systim.exit(-1)含义与区别

System.exit和System.exit区别