使用 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 在应用启动时快速退出