UIAbility的3种启动模式(新手必看)
UIAbilityy 的启动模式是指 UIAbility 实例在启动时的不同呈现状态。
针对不同的业务场景,系统提供了 singleton(单实例模式)、multiton(多实例模式)和 specified(指定实例模式)这 3 种启动模式。
每次调用 startAbility() 方法时,如果应用进程中该类型的 UIAbility 实例已经存在,则复用系统中的 UIAbility 实例。系统中只存在唯一一个 UIAbility 实例,即在最近任务列表中只存在一个该类型的 UIAbility 实例。
如果需要使用 singleton 启动模式,在 module.json5 配置文件中的“launchType”字段配置为“singleton”即可。
multiton 启动模式的开发使用,只需在 module.json5 配置文件中的 launchType 字段配置为 multiton 即可。
例如,用户在应用中重复打开同一个文档时,启动的均是最近任务列表中的同一个任务。以及在应用中重复新建文档时,启动的均是最近任务列表中新的任务。这种情况下可以将 UIAbility 配置为 specified。当再次调用 startAbility() 方法启动该 UIAbility 实例时,且 AbilityStage 的 onAcceptWant() 回调匹配到一个已创建的 UIAbility 实例。此时,再次启动该 UIAbility 实例时,只会进入该 UIAbility 的 onNewWant() 回调,不会进入其 onCreate() 和 onWindowStageCreate() 生命周期回调。
specified 启动模式的开发使用,只需在 module.json5 配置文件的“launchType”字段配置为“specified”即可。
针对不同的业务场景,系统提供了 singleton(单实例模式)、multiton(多实例模式)和 specified(指定实例模式)这 3 种启动模式。
singleton启动模式
singleton 启动模式为单实例模式,也是默认情况下的启动模式。每次调用 startAbility() 方法时,如果应用进程中该类型的 UIAbility 实例已经存在,则复用系统中的 UIAbility 实例。系统中只存在唯一一个 UIAbility 实例,即在最近任务列表中只存在一个该类型的 UIAbility 实例。
如果需要使用 singleton 启动模式,在 module.json5 配置文件中的“launchType”字段配置为“singleton”即可。
{ "module": { // ... "abilities": [ { "launchType": "singleton" } ] } }
multiton启动模式
multiton 启动模式为多实例模式,每次调用 startAbility() 方法时,都会在应用进程中创建一个新的该类型 UIAbility 实例。即在最近任务列表中可以看到有多个该类型的 UIAbility 实例。这种情况下可以将 UIAbility 配置为 multiton 模式。multiton 启动模式的开发使用,只需在 module.json5 配置文件中的 launchType 字段配置为 multiton 即可。
specified启动模式
specified 启动模式下,在 UIAbility 实例创建之前,允许开发者为该实例创建一个唯一的字符串 Key,创建的 UIAbility 实例绑定 Key 之后,后续每次调用 startAbility() 方法时,都会询问应用使用哪个 Key 对应的 UIAbility 实例来响应 startAbility 请求。运行时由 UIAbility 内部业务决定是否创建多实例,如果匹配有该 UIAbility 实例的 Key,则直接拉起与之绑定的 UIAbility 实例,否则创建一个新的 UIAbility 实例。例如,用户在应用中重复打开同一个文档时,启动的均是最近任务列表中的同一个任务。以及在应用中重复新建文档时,启动的均是最近任务列表中新的任务。这种情况下可以将 UIAbility 配置为 specified。当再次调用 startAbility() 方法启动该 UIAbility 实例时,且 AbilityStage 的 onAcceptWant() 回调匹配到一个已创建的 UIAbility 实例。此时,再次启动该 UIAbility 实例时,只会进入该 UIAbility 的 onNewWant() 回调,不会进入其 onCreate() 和 onWindowStageCreate() 生命周期回调。
specified 启动模式的开发使用,只需在 module.json5 配置文件的“launchType”字段配置为“specified”即可。