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 是最低要求,所以它不必在较低版本上工作。

谢谢!

4

2 回答 2

4

通过删除整个活动呼叫历史并启动 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);
于 2014-11-20T22:09:12.597 回答
-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)

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

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

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

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

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

System.exit但是,如果您的活动在后台使用其他资源,例如 Internet、视频等,则不应使用。

于 2014-11-20T22:15:13.273 回答