默许规矩
在不同的task中翻开相同的activity,Activity会被创立多个实例,并放到不同的task傍边。
SingleTask
主要是唯一性,确保只有一个task里又这个Acitivty,也确保了task里最多只有一个这个Acitivity。虽然叫single可是全局只有这一个目标。
假如task里不存该activity实例则创立,不然就经过onNewIntent()从头激活。
-
被发动的SingleTask Acitivty假如和发动它Activity的在同一个运用
存在会清空该SingleTask Acitivty上方的acitivty 不存在则新建
2.被发动的SingleTask Acitivty假如和发动它Activity的在同一个运用
假如现已存在则将该SingleTask Acitivty上方的acitivty清空,然后将task叠加在发动它的task上方,按下回来键会先清空SingleTask Acitivty地点task的一切acitivty。再到发动它的task。假如推到后台或许查看最近使命,这两个task也会拆开。假如回到singletask回来清空则到了桌面。
不存在则新建,逻辑大约和存在类似
allowTaskReparenting
一般一个activity只会跟一个task,不会跳来跳去,可是allowTaskReparenting能够让你这样做。
是否允许从头找爹,A和B两个App。A中的aActivty发动了B中的bActivty.
假如B是为发动,那么bActivity先会跟着发动它的栈,等B发动了,又随B去了,就像关羽跟曹操,刘备来了继续会跟从刘备。
假如B是已发动,我看栈的内容是,那么bActivity会一向跟着发动它的栈A,而不去找B。这儿其实我是存疑的,没想通这样设计的意图,先挖坑。
过了3小时,坑埋了…..
假如B已发动,那么bActivity会跟着发动它的栈A,而不去找B。没错,如下图所示,可是
- 可是从头翻开B的时分,bActivity依旧会奔向B。
这个allowTaskReparenting就不会像singletask相同,切到后台在回来,两个Task被拆开,导致回来就切断了自己的后路的问题。
可是留意这玩意在android 9 和10上坏的,慎用。
相当于在task上叠加,然后切到后台或许查看最近使命的时分被拆开了。一旦这样操作一向回来就会回到桌面。不这样操作,一向回来会到上一个task。
SingleInstance
除了和SingleTask唯一性还有独占性,确保task里只有我。 一个task只有它自己,依旧会压在调用它的task的上面。到后台依旧会被拆分。
由于SingleInstance一个task只能存在一个acitivty, 假定A运用翻开了SingleInstance Activity,那么创立的SingleInstance Task B。 所以SingleInstance Activity创立新acitivity时,会新建一个task C,假如该activity原先就有task C,那么也会放到栈顶然后把原先task C一同叠在所以SingleInstance Activity Task B上。
依照次序便是A B C
一般来说B和C的taskAffinity是相同的,可是最近使命只会显示一个taskAffinity,所以在最近使命里只会看到两个task A 和C。最近使命里看到的未必或许,看不到的未必就死了。
taskAffinity
**相当于对Acitivty的预先分组,默许取自于包名,**一般取自栈底的taskAffinity。
在taskAffinity的情况下发动activity Intent要new Task 不然不会创立新栈 假如配置了singletask也会去查看。相同则继续入栈,不同则会去寻觅它的taskAffinity相同的task后入栈。
singletask和taskAffinity一同用也能将activity放到新栈
最近运转使命栈中只能显示一个taskAffinity的task
这些特性的意图
SingleTop App内部 SIngleInstance 更多是开放给外部App来共享运用 SIngleTask 内部交互和外部交互都会用得上
环绕使命发动和使命切换的问题。
栈和进程无关。
一个栈能够又多个进程的acitivty就像我上面举例的allowTaskReparenting
四种发动模式 和常见的标志位 。PMS时解析 发动模式啥的