Android12 新的启动模式launchMode="singleInstancePerTask"
新的启动模式singleInstancePerTask
Android 大家熟知的启动模式
standard 标准模式
我们每次新建Activity的时候,默认就是standard 标准模式,不管返回栈中有没有都会新建一个Activity放在栈顶, 即使栈顶存在也会新建。
singleTop 单个栈顶模式
如果返回栈的栈顶存在,则不新建,直接显示给用户,如果栈顶不存在就新建并放在栈顶,可以理解为只看栈顶
singleTask 单栈单例模式
如果当前返回栈中存在,不管是在栈的什么位置,都不会新建,会把它上面的全部出栈,它直接显示在栈顶
singleInstance 独栈单例模式
为什么是独栈呢?,因为如果启动模式是singleInstance 的话,Android会为当前Activity 新建一个单独的栈,方便被其他应用来调用,当前任务栈中仅有这一个Activity
思考:存在跳转逻辑:ActivityA(standard ) 跳转到 ActivityB(singleInstance ) 跳转到 ActivityC(standard ),按Back键,页面的显示逻辑是怎样的呢?
Android 12 新增的启动模式singleInstancePerTask
singleInstancePerTask 每个任务的单例模式
Android12新增的对于singleInstancePerTask描述如下:
<!-- The activity can only be running as the root activity of the task, the first activity
that created the task, and therefore there will only be one instance of this activity
in a task. In constrast to the {@code singleTask} launch mode, this activity can be
started in multiple instances in different tasks if the
{@code FLAG_ACTIVITY_MULTIPLE_TASK } or {@code FLAG_ACTIVITY_NEW_DOCUMENT} is set.-->`
<enum name="singleInstancePerTask" value="4" />
百度翻译:
该活动只能作为任务的根活动(创建任务的第一个活动)运行,
因此任务中只能有一个此活动的实例。与{@code singleTask}启动模式不同,
如果设置了{@ccode FLAG_activity_MUNIPLE_TASK}或{@codeFLAG_ACTIVETY_NEW_DOCUMENT},
则可以在不同任务的多个实例中启动此活动
默认作用和singleTask相似,不同的在于singleInstancePerTask不需要设置一个不同的taskAffinity即可创建新的Task。
另外结合Intent.FLAG_ACTIVITY_MULTIPLE_TASK和Intent.FLAG_ACTIVITY_NEW_DOCUMENT,每次启动了launchMode设置为“singleInstancePerTask”的Activity都可以创建一个新的Task,那么这个新启动的Activity自然就是这个新创建的Task的root Activity。singleInstancePerTask是singleTask的扩展,这个Activity可以有多个实例,但是每个都是所在的Task的root Activity。