0

我正在构建一个 Android 应用程序,它启动一个在后台持续运行的服务。当用户使用 Home 按钮关闭其中一个活动(与服务通信),然后再次导航到应用程序时,他们将获得最后一个活动。这是正确的行为。

但是,当我明确停止服务时(通过菜单中的选项),应用程序应该“退出”。目前,它的工作原理是这样的:

stopService(new Intent(this, MyService.class));

finish();

// just go to to the home screen, as it is intended in Android
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

这很好用。但是当我现在再次导航到应用程序时,它会启动之前打开的 Activity。我想要的是它再次启动启动活动(启动器)。

我怎么能做到这一点?

4

4 回答 4

1
System.exit(0);

但是您应该只有一个 Activity 在堆栈中。

于 2019-07-25T10:11:24.563 回答
0

如果你看它的描述,android:excludeFromRecents它说:

Whether or not the task initiated by this activity should be excluded from the list of recently used applications ("recent apps").

这不是你要找的吗?一旦用户点击退出,这个应用程序就不会出现在最近使用的应用程序中,因此会完全从内存中删除?:)

于 2013-09-17T19:06:11.987 回答
0

我认为“退出时完全从内存中删除应用程序”不是问题。即使您停止服务,该进程也可能保留在内存中——这是系统的决定。

您想要一个明确的自定义行为 - 用户从菜单中选择您的“退出”选项 - >下一个应用程序启动从主要活动开始 - 所以您需要明确处理这个问题。

默认行为是用户在重新启动时返回到上一个活动。因此,如果他们通过您的活动“退出”退出,他们只会返回主要活动。您对“退出”菜单选项的使用是非标准的(并不是说它不好)。

一种选择是自己通过活动退出。也许现在您刚刚完成当前活动,而应该完成后堆栈中的所有活动。

另一种选择是您可以保存一个标志,当再次启动 UI 时,您可以读取该标志并启动适当的活动(但再次小心返回堆栈)。设置该标志的最简单方法可能是覆盖 onSaveInstanceState(Bundle),然后在 onCreate 中读取包(或使用 sharedpreferences)。

于 2013-09-17T19:32:55.367 回答
0

您是否尝试将clearTaskOnLaunch设置true为您的主要活动(在您的清单中)。

文档中:

When the value is "true", every time users start the task again, they are brought to its root activity regardless of what they were last doing in the task and regardless of whether they used the Back or Home button to leave it.

这似乎描述了你想要做什么。我从未亲自尝试过,但似乎值得为您的目的进行调查。

于 2013-09-17T21:21:55.380 回答