一、Singleton(单实例模式)
区别:默认模式,应用进程内仅存唯一实例,重复启动复用已有实例
生命周期触发:首次启动触发onCreate→onWindowStageCreate;复用触发onNewWant
应用场景:主界面、全局功能页(如设置页)
性能影响:避免重复创建实例,减少内存开销和渲染耗时,提升冷启动速度
二、Multiton(多实例模式)
区别:每次启动均创建新实例,独立运行互不影响生命周期触发:每次启动都触发onCreate→onWindowStageCreate→onForeground
应用场景:多任务场景(如分屏浏览、聊天多窗口)
性能影响:增加内存占用和初始化耗时,需谨慎管理实例数量
三、Specified(指定实例模式)
区别:通过Key动态匹配实例,匹配成功复用,失败创建新实例生命周期触发:匹配成功触发onNewWant,失败触发完整生命周期链
应用场景:文档编辑(如按路径复用)、电商商品详情页性能影响:通过精准匹配平衡资源消耗与用户体验,需合理设计Key规则
四、跨模块指定实例模式(specified)配置规则
配置位置:
当主模块调用其他模块的Ability时,若目标Ability设为specified模式,需在目标Ability所属模块的module.json5文件中配置srcEntry属性,指向该模块的AbilityStage入口文件。
关键配置步骤
-
目标模块配置
- 在目标模块的
module.json5中,找到对应UIAbility配置项,添加"launchType": "specified"。 - 设置
srcEntry属性指向本模块的AbilityStage文件路径:// 目标模块的module.json5示例 { "module": { "name": "target_module", "srcEntry": "./ets/targetabilitystage/TargetAbilityStage.ets", "abilities": [{ "name": "TargetAbility", "launchType": "specified" }] } }
- 在目标模块的
-
实现AbilityStage
目标模块需在AbilityStage中实现onAcceptWant回调,动态返回实例标识:// TargetAbilityStage.ets import { AbilityStage, Want } from '@kit.AbilityKit'; export default class TargetAbilityStage extends AbilityStage { onAcceptWant(want: Want): string { // 返回唯一标识Key,匹配成功复用实例,否则新建 return want.parameters?.key || 'defaultKey'; } }
核心逻辑说明
- 模块独立性:每个模块的AbilityStage仅管理本模块的UIAbility实例逻辑,主模块调用时无需修改自身模块配置。
- 跨模块调用:主模块通过Want对象指定目标Ability的
bundleName和abilityName即可触发跨模块实例匹配逻辑。 - 性能影响:通过合理设计Key生成规则(如结合业务参数),可在跨模块场景中精准控制实例复用,避免重复创建带来的性能损耗。