「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」
SingleTask与singleInstance区别:再被启动之后,用户按返回键时,singleTask会在自己APP里进行回退,而singleInstance会直接返回到原先的APP,若用户稍后从桌面点开Activity所在APP的时候,singleTask会看到此Activity在栈顶,而singleInstance会看到此Activity已经不见了,跑到后台去了,再次启动时,它会跑到前台来,调用onNewIntent()回调。在最近任务里看到的Task不一定还存在,在最近任务里看不到的Task不一定被销毁(singleInstance)
为什么会被藏起来呢,因为他们的taskAffinity冲突了,安卓中一个APP最多只有一个Task可以显示在最近任务列表里,但其实用来甄别这个唯一性的并不是APP,而是taskAffinity(任务,关联),在AndroidManifest文件中这个属性相当于给每个Activity进行一个预先的分组,他的值默认取自Activity所在的Application的taskAffinity, Application的taskAffinity默认取自APP包名,每个Task也有它的taskAffinity,它的值取自栈底的Activity的taskAffinity,可以通过AndroidManifest.xml文件去定制taskAffinity,默认情况下一个APP下的所有Task的taskAffinity都是一样的是APP的包名,比如我们启动一个新的Task的时候,比如开机后,初次点开一个APP,这个Task就会得到一个taskAffinity,它的值就是它所启动的第一个Activity的taskAffinity,当我们继续从已经打开的Activity继续打开新的Activity的时候,taskAffinity就被忽略了,新的Activity会直接入栈,不管来自哪,如果新的Activity配置了"singleTask",Android就会去检查新的Activity和当前Task的taskAffinity是否相同,如果相同就继续入栈,如果不同,Activity会去寻找和它的taskAffinity相同的Task后入栈或者创建一个新的Task,
taskAffinity和最近任务列表:最近任务列表会列出现有的Task,但他们的TaskAffinity需要不一样,在安卓中,同一个TaskAffinity可以被创建出多个Task,但他们最多只有一个可以显示在最近任务列表中