android singleTask活动不作为root?

android singleTask活动不作为root?,第1张

概述我一直在阅读关于发射模式的文档,有一点我没有理解. doc说singleTask活动始终是堆栈的根: In contrast, “singleTask” and “singleInstance” activities can only begin a task. They are always at the root of the activity stack. Moreover, the dev 我一直在阅读关于发射模式的文档,有一点我没有理解. doc说singleTask活动始终是堆栈的根:

In contrast,“singleTask” and “singleInstance” activitIEs can only
begin a task. They are always at the root of the activity stack.
Moreover,the device can hold only one instance of the activity at a
time — only one such task.

但是:如果你在Figure 4查看this部分文档,你会看到当Activity 2启动Activity Y(将该任务置于前台)时,Activity Y已经位于任务的顶部并且将位于当前任务的顶部而不是根.

我在simulation app中尝试了这个场景,当我创建singleTask活动时,它总是创建一个新任务.但是,如果唯一的实例已经存在,则它将完成高于此实例的所有活动,因此唯一的实例可以是根(也是任务中的唯一活动).

活动Y如何成为活动X上方任务的首位?

我还有其他原因吗?

PS:我也不太了解Task和后台堆栈之间的区别.

解决方法 像往常一样(叹气),文档是错误的.在您引用的图表中,显然,Activity Y不能定义为singleTask,而是包含2个活动的后台任务中的顶级活动.

在使用特殊启动模式singleTask和singleInstance测试场景时,请注意taskAffinity在此行为中起着重要作用,因为taskAffinity优先于特殊启动模式.

关于“任务”和“后台”之间的区别:

“任务”是一组可以作为整个组进行 *** 作的活动.

>当您启动应用程序时(假设它当前没有运行),AndroID会创建一个位于前台的新任务,其中包含您启动的应用程序的根活动.
>当该活动开始新活动时,这些新活动将添加到当前任务中(通常,虽然此行为有例外).
>按HOME按钮时,当前任务将从前景移动到后台.
>当您显示“最近”列表时,显示的是最近任务列表,而不是最近活动列表或最近应用程序列表.
>当您从最近任务列表中选择任务时,如果该任务仍处于活动状态(其中仍包含实时活动),则整个任务(包括其所有活动)将从后台传递到前台.
>任务也可以“堆叠”.当前任务中的活动在新任务中启动活动时,新任务将堆叠在当前任务之上.这仅用于控制新任务完成时发生的情况.在通常情况下,当新任务完成(其所有活动都已完成)时,AndroID将使用户返回上一个任务(即:启动完成任务的任务).

“后台堆栈”通常是指任务中的一组活动.每个任务都有自己的一系列活动.这用于控制当前活动(后端堆栈顶部的活动)完成时发生的情况.通常,AndroID会将用户返回到直接位于后端堆栈中的完成活动下方(下方)的活动.

AndroID代码和文档通常是指任务的“根”(这是用于启动任务的活动)和任务的“顶部”或“前端”(这是当前显示的活动) ).

实际上,文档在于:-(这是一个例子:

In contrast,“singleTask” and “singleInstance” activitIEs can only
begin a task.

这句话通常是,但并不总是正确的.例如,假设我有2个活动:A和B.A是启动活动(即:具有ACTION = MAIN和category = DEFAulT的活动)并且使用标准启动模式定义. B由launchMode =“singleTask”定义.我启动应用程序,AndroID创建了一个A的实例.然后,我做了:

startActivity(new Intent(this,B.class));

这将创建一个活动B的新实例,并将其置于同一任务中的A之上.它不会创建以活动B为根的新任务.原因是活动A和活动B具有相同的taskAffinity(默认情况下,应用程序的所有活动具有相同的taskAffinity),在这种情况下AndroID将忽略B的启动模式.

文件还说:

Moreover,the device can hold only one instance of the activity at a
time — only one such task.

同样,taskAffinity可以破坏这种行为.再假设我们有A,B和C,都具有相同的(默认)taskAffinity. A和C有标准的启动模式,B有launchMode =“singleTask”.如果A开始B,则B的实例不是在新任务中结束,而是在与A相同的任务中(参见上文).现在B启动C.AndroID创建一个C实例并将其置于同一任务中的B之上.现在C调用:

startActivity(new Intent(this,B.class));

AndroID创建了一个新的B实例,并将其置于任务中的C之上.现在有2个B实例,它们都不是任务的根活动!这种行为也是由于taskAffinity胜过启动模式.

总结

以上是内存溢出为你收集整理的android singleTask活动不作为root?全部内容,希望文章能够帮你解决android singleTask活动不作为root?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1130236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存