gpt4 book ai didi

android - android singleTask Activity 不作为root?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:37 25 4
gpt4 key购买 nike

我一直在阅读关于启动模式的文档,有一件事我不明白。doc表示单任务活动始终是堆栈的根:
相反,“singletask”和“singleinstance”活动只能
开始一项任务。它们始终位于活动堆栈的根。
此外,设备在
时间-只有一个这样的任务。
但是:如果您查看位于this的doc的Figure 4部分,您会看到当活动2启动活动y(将该任务置于前台)时,活动y已经位于任务的顶部,并且将位于当前任务的顶部,而不是根。
我在simulation app中尝试了这个场景,当我创建singletask活动时,它总是创建一个新任务。但是,如果唯一的实例已经存在,它将完成此实例之上的所有活动,因此唯一的实例可以是根(也是任务中的唯一活动)。
活动y如何成为活动x上方任务的顶部?
我失踪还有其他原因吗?
注:我也不太明白任务和后堆栈之间的区别。

最佳答案

像往常一样(叹气),文件是错误的。在您引用的图表中,显然活动y不能定义为singleTask,而是包含两个活动的后台任务中的顶级活动。
在测试特殊发射模式singleTasksingleInstance的场景时,请注意taskAffinity在这种行为中起着重要作用,因为taskAffinity优先于特殊发射模式。
关于“任务”和“后堆栈”之间的区别:
“任务”是一堆可以作为一个整体进行操作的活动。
当您启动一个应用程序(假设它当前没有运行)时,android会在前台创建一个新任务,其中包含您启动的应用程序的根活动。
当该活动启动新活动时,这些新活动将添加到当前任务中(通常,尽管此行为有例外)。
按“开始”按钮时,当前任务将从前景移到背景。
显示“最近”列表时,显示的是最近的任务列表,而不是最近的活动列表或最近的应用程序列表。
从最近任务列表中选择任务时,如果该任务仍处于活动状态(其中仍有活动),则整个任务(包括其所有活动)将从后台转到前台。
任务也可以“堆叠”。当当前任务中的活动启动新任务中的活动时,新任务将堆叠在当前任务的顶部。这只用于控制新任务完成时发生的事情。通常情况下,当新任务完成时(其所有活动都已完成),android会将用户返回到上一个任务(即:启动完成任务的任务)。
“back stack”通常指任务中的一组活动。每个任务都有自己的活动堆栈。这用于控制当前活动(位于后堆栈顶部的活动)完成时发生的事情。通常,android会将用户返回到位于后堆栈中finishing活动正下方的活动。
android代码和文档通常指任务的“根”(这是用于启动任务的活动)和任务的“顶”或“前”(这是当前显示的活动)。
实际上,文档是这样的:-(这里有一个例子:
相反,“singletask”和“singleinstance”活动只能
开始一项任务。
这种说法通常是正确的,但并不总是正确的。例如,假设我有两个活动:ABA是发射活动(即:具有ACTION=MAINCATEGORY=DEFAULT的活动),用标准发射模式定义。BlaunchMode="singleTask"定义。我启动应用程序,android创建一个A实例。然后在A中:

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

这将创建活动 B的新实例,并将其放在同一任务中的 A之上。它不会创建以activity B为根的新任务。原因是activity A和activity B具有相同的 taskAffinity(默认情况下,应用程序的所有活动都具有相同的 taskAffinity),在这种情况下,android将忽略 B的启动模式。
文件还说:
此外,设备在
时间-只有一个这样的任务。
同样, taskAffinity可以打破这种行为。再次假设我们有 ABC,都有相同的(默认值) taskAffinityAC具有标准启动模式, B具有 launchMode="singleTask"。如果 A开始 B,则 B的实例不会在新任务中结束,而是在与 A相同的任务中结束(参见上文)。现在 B开始 C。android创建一个 C的实例,并将其放在同一任务中的 B之上。现在 C呼叫:
startActivity(new Intent(this, B.class));

android创建了一个新的 B实例,并将其放在任务中的 C之上。现在有两个 B实例,它们都不是任务的根活动!这种行为也是因为 taskAffinity胜过发射模式。

关于android - android singleTask Activity 不作为root?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com