1

在这里阅读谷歌自己的文档,他们声明以“singleTask”启动模式启动一个活动将启动一个以该活动为根的新任务,或者,如果其中已经有一个包含该活动的任务,则整个任务的堆栈是提出,意图将通过现有活动的onNewIntent方法进行路由。

然而,关于将整个任务活动堆栈向前推进,这张图片......

在此处输入图像描述

似乎将 Activity Y 的绿色任务显示为设置了“singleTask”。但是,活动 Y 不是根。Activity X 是,但这不应该是可能的,因为如果 Activity X 启动了 Activity Y,那么不会有第三个以 Activity Y 为根的任务吗?(起初我想也许 Activity X 启动了 Y 带有覆盖“singleTask”的标志,但我没有看到这样的标志。)

此外,撇开这个问题不谈,如果在 Activity 2 请求 Activity Y 之前,Activity Y 启动了一个新的 Activity Z,它只是一个标准启动模式,它似乎无法解释会发生什么。由于 Activity Y 是“singleTask”,而不是“singleInstance”,因此 Activity Z 将出现在与 Activity Y 相同的任务中,位于其后堆栈的顶部。

那么当 Activity 2 请求 Y 时 Z 会发生什么?这是否会使 X 和 Y 前进,但会破坏 Z,这意味着 Blue 任务刚刚在 Green 任务的后台堆栈中破坏了一个活动?...或者它是否提出了 X、Y 和 Z,这意味着即使您请求 Y,您现在正在查看 Z?

起初我以为是前者,但FLAG_ACTIVITY_CLEAR_TOP的文档也明确指出:

如果正在启动的 Activity 已经在当前任务中运行,那么不会启动该 Activity 的新实例,而是将其之上的所有其他 Activity 销毁,并将此 Intent 传递给该 Activity 的恢复实例(现在顶部),通过 onNewIntent())。

产生此行为的 launchMode 属性没有值

此外,同样的场景。Activity 2(蓝色任务)启动 Activity Y(绿色任务),同时将其后退堆栈向前推进。用户点击主页按钮并重新启动创建蓝色堆栈的应用程序。它会跳回活动 2 吗?如果不是,那么就打破了所有意图和目的(没有双关语),任务就是应用程序的立场。

那么我错过了什么?

4

0 回答 0