假设一个android应用程序中有两个活动,启动模式为“singleinstance”。假设下面是一个例子。
我正在从活动a->b(launchMode="singleInstance"
)导航。现在从Activity B->C开始。最后,我从Activity C->D(launchMode="singleInstance"
)导航。
现在我们知道活动B的实例将在不同的任务中创建,而A&C将在不同的任务中创建。
现在,我的问题是,活动d的任务实例将放在哪个位置。是与活动B一起,还是为活动D创建其他任务。
谢谢。
最佳答案
如果你不想看澄清的话,我就大胆地回答你的问题。
在使用launchMode="singleInstance"
时,有两件事要记住:
活动将始终在新任务中创建
从该活动启动的所有活动都将在单独的任务中创建
因此,启动模式为singleInstance
的活动在其自身任务中始终是孤立的。任务中不会有其他活动。
以你关于活动a、b、c和d的问题为例:
活动A启动活动B
活动blaunchMode="singleInstance"
所以它在执行一个新任务
活动B启动活动C
活动C与活动A在同一任务中启动
活动C启动活动D
活动dlaunchMode="singleInstance"
所以它在执行一个新任务
从这里发生的事情来看,您有一个a任务,它存储launchMode="standard"
活动a和活动c。活动b在它自己的任务中。活动d属于它自己的任务。
因此,如果您选择退出这些活动,您会注意到:
活动d已备份,活动c出现
活动C已备份,并且出现活动A
这是因为活动C和活动A在同一个任务上。
此外,活动d肯定不会与活动b在同一个任务中,因为活动b的任务由于launchMode="singleInstance"
而仅用于活动b。
请记住,可以同时在后台执行任意数量的任务。只是,如果有太多的被持有或如果系统需要内存,它将开始破坏这些后台活动在您的多个任务。