阅读Google自己的文档here,他们声明以'singleTask'启动模式启动活动将以该活动作为其根启动一项新任务,或者,如果已经有一项任务包含该活动,那么整个任务's stack is brought forward and the intent will be routed through the existing activity' s onNewIntent 方法 .

但是,关于将整个任务活动堆栈向前推进,此图像......

enter image description here

似乎显示活动Y的绿色任务设置为'singleTask' . 但是,活动Y不是根 . 活动X是,但是,根本不应该在活动Y的第三个任务't be possible because if Activity X launched Activity Y, then wouldn'? (起初我以为也许Activity X用带有超越'singleTask'的标志启动Y但是我看不到这样的标志 . )

此外,除了这个问题之外,它似乎没有解释如果在活动2请求活动Y之前,活动Y开始一个新的活动Z,这只是一个标准的启动模式会发生什么 . 由于活动Y是'singleTask'而不是'singleInstance',因此活动Z将出现在与其后堆栈顶部的活动Y相同的任务中 .

那么当活动2请求Y时,Z会发生什么?这是否会带来X和Y前进,但是会破坏Z,这意味着Blue任务只是在Green任务的后栈中进行了一项活动? ...或者它是否提出了X,Y和Z,这意味着即使你要求Y,你现在正在看Z?

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

如果正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是销毁其上的所有其他活动,并将此意图传递给活动的恢复实例(现在在顶部),通过onNewIntent()) . 生成此行为的launchMode属性没有任何值 .

另外,同样的情况 . 活动2(蓝色任务)启动活动Y(绿色任务),将其后台堆栈与其一起展开 . 用户点击主页按钮并重新启动创建蓝色堆栈的应用程序 . 它会跳回活动2吗?如果没有,那么就打破了所有意图和目的(没有双关语)的立场,任务就是一个应用程序 .

那么我错过了什么?