我需要暂时启动一个外部 activity (这不是我的),然后我有 service 启动我以前的 activity 供用户查看 .

这很好用,但问题是当用户按下后退键时,他会到达外部 activity .

我在这里有两个不同的 activity 启动,一个用于外部 activity ,另一个用于我的 activity 返回(我需要使用 FLAG_ACTIVITY_NEW_TASK 因为我是从 service 启动它) .

对于这两次发布,我尝试了以下任意组合: FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET ,_ FLAG_ACTIVITY_NO_HISTORY ,_ FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TOP ,_ FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_EXCLUDE_FROM_RECENTS .

什么都没有帮助,我在按下后继续看到外部 activity .

我在这里看到了一些类似的问题,但是他们都在自己的应用程序中有中间活动,因此他们可以在其上调用finish,或者在清单中设置 noHistory="true" .

有任何想法吗?

更新:似乎问题是我从服务重新启动我以前的活动,这意味着我需要从Tasks and Back Stack的文档中给它FLAG_ACTIVITY_NEW_TASK:

FLAG_ACTIVITY_NEW_TASK在新任务中启动活动 . 如果任务已在您正在启动的活动上运行,则该任务将返回到前台,并恢复其上一个状态,并且活动将在onNewIntent()中接收新的意图 . 这会产生与上一节中讨论的“singleTask”launchMode值相同的行为 .

并从singleTask段落:

“singleTask”系统创建一个新任务并在新任务的根目录下实例化活动...注意:虽然活动在新任务中启动,但“返回”按钮仍会将用户返回到上一个活动 .

所以我需要一个以某种方式覆盖这种行为的旗帜......