Android 标志\u活动\u清除\u顶部是从另一个任务中清除活动

Android 标志\u活动\u清除\u顶部是从另一个任务中清除活动,android,Android,我发现很难理解Android如何处理任务和活动,需要解决我的一个特殊问题 我有一个选项卡a,其中singleTask作为清单中的启动模式,并且也是启动程序。这会在各个选项卡可见(或单击)时在内部启动另外两个活动B、C。现在考虑到活动B是与A一起启动的,任务后堆栈将变为 任务1[A B] 我还碰巧在后台运行了一个服务(X)。过了一段时间,在某个事件中,服务X会打开一个新的活动D(这不是选项卡活动规格的一部分)。活动D被指定为启动模式为单任务,并且与包不同。由于服务可以直接启动活动,我必须提供标记活

我发现很难理解Android如何处理任务和活动,需要解决我的一个特殊问题

我有一个选项卡a,其中singleTask作为清单中的启动模式,并且也是启动程序。这会在各个选项卡可见(或单击)时在内部启动另外两个活动B、C。现在考虑到活动B是与A一起启动的,任务后堆栈将变为 任务1[A B]

我还碰巧在后台运行了一个服务(X)。过了一段时间,在某个事件中,服务X会打开一个新的活动D(这不是选项卡活动规格的一部分)。活动D被指定为启动模式为单任务,并且与包不同。由于服务可以直接启动活动,我必须提供标记活动\u新任务。一切顺利,活动D被创建并显示

根据developer.android.com关于任务创建和所有任务的解释,新活动D应该在自己的新任务中创建。因此,整个观点应该是这样的

[背景任务1[A B][前景任务2[D]]

现在,活动D中提供了一种转到活动a的方法,并且意图标志设置为标志\活动\清除\顶部

据我所知,此标志应清除A上的所有活动,这些活动位于A为根活动的任务中。这意味着它应该只销毁活动B。i、 观点应该是这样的 [背景任务2[D][前景任务1[A]]

但在我的例子中,它也在破坏活动D,这显然不是我想要的行为,因为我希望活动D始终存在,除非用户明确完成。导航后,堆栈看起来像 [前景任务1[A]]


我做错什么了吗?如果上述行为是Android中的预期行为,那么有没有一种方法可以让我从D开始a,而不清除D,但完成a和D之间的所有其他活动

问题原来是AndroidManifest.xml中活动D的两个声明。 删除了额外的声明,它现在工作得很好