我发现很难理解Android如何处理任务和活动,并且需要解决我的这个特定问题。
我有一个 TabActivity A , singleTask 作为manifest中的launchMode,也是启动器。这会在相应选项卡的可见性(或点击)时在内部启动另外两个活动B,C 。现在考虑到活动B与A一起启动,任务返回堆栈变为 任务1 [A B]
我也碰巧在后台运行服务(X)。在某些时候,在某些事件中,Service X会打开一个新的活动D (这不是标签活动规范的一部分)。活动D被指定为launchMode为 singleTask ,并且亲和力与包不同。由于服务可以直接启动活动,我必须提供 FLAG_ACTIVITY_NEW_TASK 。一切顺利,活动D被创建和显示。
通过developer.android.com关于任务创建的解释和所有内容,新的Activity D应该在它自己的新任务中创建。因此,整个观点应该看起来像
[背景任务1 [A B]] [前景任务2 [D]]
现在活动D中提供了一种方法转到活动A,并且意图标志设置为 FLAG_ACTIVITY_CLEAR_TOP 。
根据我的理解,这个标志应该清除A作为根活动的任务中的所有A活动。这意味着它应该只破坏活动B.即观点应该是这样的 [背景任务2 [D]] [前景任务1 [A]]
但在我的情况下,它也在破坏活动D,这绝对不是我想要的行为,因为我希望Acitivity D一直存在,除非用户明确完成。导航后,堆栈看起来像 [前景任务1 [A]]。
我在这里做错了吗?如果上述行为是Android中的预期行为,那么有没有一种方法可以从D开始A而不清除D但是完成A&之间的所有其他活动。 d?
答案 0 :(得分:0)
问题原来是AndroidManifest.xml中Activity D的两个声明。 删除了额外的声明,它现在工作得很好。