我有4个活动A,B,C,D,E,每个活动都被声明为android:launchMode="singleInstance"
,A是parentActivity
的B,而B是C的父活动,在清单中。
现在用户导航到E,如下所示:A> B> C> D> E. 我在E中有一个按钮,其中包含以下onClickListener
Intent intent = new Intent(E.this, C.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
我需要什么?(同样根据文档,如果我理解正确,这应该发生)
我想要这个堆栈:C | B |甲
发生了什么?
我得到这个堆栈:C | E | D | B |甲
PS:我的问题与this非常相似,但是那里给出的答案并不适合这个问题。我在那里和其他地方找到的一些答案:
答案 0 :(得分:5)
singleTask
究竟是什么错误?
当singleInstance
用作launchMode
时,以及启动活动时,Android会确保在新任务中启动它,就好像添加了NEW_TASK
标志一样它内部唯一的活动。
因此,当用户导航到E时,堆栈永远不会像[A | B | C | D | E] 相反,有五个不同的任务,如[A] [B] [C] [D] [E]。
当我尝试E>在CLEAR_TOP
的情况下,它确实在其任务中搜索了C并尝试清除C之后的所有活动。但是C在E所在的任务中从未出现过。
所以它尝试启动一个新的活动C,但是当我将launchMode
设置为singleInstance
时,它除了将[C]保持在前面而没有触及其他任务之外别无他法。
那么
singleTask
如何运作?
它创建了我想要的堆栈[A | B | C | D | E]和CLEAR_TOP
按预期工作。完成!
答案 1 :(得分:1)
问题出在android:launchMode="singleInstance"
。根据singleInstance的documentation:
如果此活动尝试启动新活动,则该新活动将启动 在一项单独的任务中启动。
因此,您的活动D作为新任务启动,这就是为什么不删除它。