UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式:
Singleton(单实例模式)
Multiton(多实例模式)
Specified(指定实例模式)
Singleton(单实例模式)
singleton启动模式为单实例模式,也是默认情况下的启动模式。
简单理解就是,当我们每次调用startAbility()方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用已经存在的UIAbility实例。(并未创建一个新的UIAbility实例,而是进入该UIAbilty的onNewWant()回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调)可以理解为系统中只存在唯一一个该UIabilty实例,即在最近任务列表中仅仅只存在一个该UIAbility实例。
Singleton启动模式需要在module.json5配置文件中的launchType字段配置为singleton
Multiton(多实例模式)
multiton启动模式为多实例模式,每次调用startAbility()方法时,与Singleton(单实例模式)不同是都会在应用进程中创建一个新的该类型UIAbility实例。(即使最近的列表中该实例)
multiton启动模式需要在module.json5配置文件中的launchType字段配置为multiton
Specified(指定实例模式)
specified启动模式为指定实例模式,就好比在特定的场景使用(文档应用中每次新建都希望能创建一个新的文档,或者是重复打开一个已经保存的文档希望打开的都是同一个文档实例)。
假设有两个实例,EntryAbility和specifiedAbility。
EntryAbility调用startAbility()方法,并在Want的parameters字段设置唯一的Key值。
系统在拉起SpecifiedAbilty之前,会先进入对应的AbilityStage的onAcceptWant()生命周期回调,获取用于标识目标UIAbility的Key值。
系统根据Key值来匹配UIAbility。
1.如果匹配成功,则会启动UIAbility实例,进入onNewWant()生命周期回调。
2.如果匹配不成功,则会创建一个新的UIAbility实例,并进入该UIAbility实例的onCrate()生命周期回调和onWindowStageCreate()生命周期回调。
新建文档就是跟多实例模式类似,一直创建新的文档。(一直点击一直创建新的文档),具体用法还要根据key值来确定
打开已保存的文档类似单例模式, 具体用法还要根据key值来确定
specified启动模式需要在module.json5配置文件中的launchType字段配置为specified
在EntryAbility中,调用startAbility()方法时,可以在want参数中传入了自定义参数instanceKey作为唯一标识符,以此来区分不同的UIAbility实例。示例中instanceKey的value值设置为字符串'KEY'。
- // 在启动指定实例模式的UIAbility时,给每一个UIAbility实例配置一个独立的Key标识
- // 例如在文档使用场景中,可以用文档路径作为Key标识
开发者根据业务在SpecifiedAbility的onAcceptWant()生命周期回调设置该UIAbility的标识。示例中标识设置为SpecifiedAbilityInstance_KEY。