阅读Google自己的文档here,他们声明以“singleTask”启动模式启动活动将以该根作为该活动开始新任务,或者,如果已经存在该活动的任务它,整个任务的堆栈被提前,意图将通过现有活动的onNewIntent
方法进行路由。
但是,关于将整个任务活动堆栈向前推进,此图像......
似乎显示活动Y的绿色任务设置为'singleTask'。但是,活动Y不是根。活动X是,但这不应该是可能的,因为如果活动X启动了活动Y,那么根本不会有活动Y的第三个任务吗? (起初我以为也许Activity X使用标志覆盖了'singleTask',但是我没有看到这样的标志。)
另外,除了这个问题之外,它似乎没有解释如果在活动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吗?如果没有,那么就打破了所有意图和目的(没有双关语意)的立场,任务就是一个应用程序。
那么我错过了什么?