Sar*_*ran 2 android android-intent android-activity
我在清单中有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);
Run Code Online (Sandbox Code Playgroud)
我需要的?(也根据文档,如果我理解正确,应该会发生这种情况)
我想要这个堆栈:C | B | 一种
发生了什么?
我得到这个堆栈:C | E | D | B | 一种
PS:我的问题与此非常相似,但是那里给出的答案不适合这个问题。我在其他地方找到的一些答案:
startactivity(intent)在设置标志后立即尝试对E进行finish()时,它只是完成E,而不完成D。Artem Mostyaev的评论解决了这个难题!使用singleTask
那到底是什么错误呢?
当singleInstance将用作launchMode和时,以及启动活动时,Android会确保在新任务中启动它,就像NEW_TASK添加了标志一样,它本身是其中的唯一活动。
因此,当用户导航到E时,堆栈就不再像[A | B | C | D | E]而是有五个不同的任务,例如[A] [B] [C] [D] [E]。
当我尝试使用E> C时CLEAR_TOP,它确实在任务中搜索了C并试图清除C之后的所有活动。但是C永远不在E所在的任务中。
因此,它尝试启动一个新的活动C,但是正如我所设定launchMode的singleInstance,它别无选择,只能使[C]领先,同时保持其他任务不变。
那么如何
singleTask工作?
它创建了我想要的堆栈[A | B | C | D | E]并按CLEAR_TOP预期工作。做完了!