Android12 新的启动模式launchMode="singleInstancePerTask"

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。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容