默许规矩

在不同的task中翻开相同的activity,Activity会被创立多个实例,并放到不同的task傍边。

SingleTask

主要是唯一性,确保只有一个task里又这个Acitivty,也确保了task里最多只有一个这个Acitivity。虽然叫single可是全局只有这一个目标。

假如task里不存该activity实例则创立,不然就经过onNewIntent()从头激活。

  1. 被发动的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去了,就像关羽跟曹操,刘备来了继续会跟从刘备。

Activity启动模式

假如B是已发动,我看栈的内容是,那么bActivity会一向跟着发动它的栈A,而不去找B。这儿其实我是存疑的,没想通这样设计的意图,先挖坑。

过了3小时,坑埋了…..

假如B已发动,那么bActivity会跟着发动它的栈A,而不去找B。没错,如下图所示,可是

Activity启动模式

  • 可是从头翻开B的时分,bActivity依旧会奔向B。

Activity启动模式

这个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

Activity启动模式

四种发动模式 和常见的标志位 。PMS时解析 发动模式啥的

Activity启动模式