likes
comments
collection
share

Activity启动模式

作者站长头像
站长
· 阅读数 19

默认规则

在不同的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启动模式