HarmonyOS UIAbility启动模式详解

37 阅读2分钟

一、Singleton(单实例模式)

区别:默认模式,应用进程内仅存唯一实例,重复启动复用已有实例
生命周期触发:首次启动触发onCreateonWindowStageCreate;复用触发onNewWant
应用场景:主界面、全局功能页(如设置页)
性能影响:避免重复创建实例,减少内存开销和渲染耗时,提升冷启动速度


二、Multiton(多实例模式)

区别:每次启动均创建新实例,独立运行互不影响生命周期触发:每次启动都触发onCreateonWindowStageCreateonForeground
应用场景:多任务场景(如分屏浏览、聊天多窗口)
性能影响:增加内存占用和初始化耗时,需谨慎管理实例数量


三、Specified(指定实例模式)

区别:通过Key动态匹配实例,匹配成功复用,失败创建新实例生命周期触发:匹配成功触发onNewWant,失败触发完整生命周期链
应用场景:文档编辑(如按路径复用)、电商商品详情页性能影响:通过精准匹配平衡资源消耗与用户体验,需合理设计Key规则

四、跨模块指定实例模式(specified)配置规则

配置位置
当主模块调用其他模块的Ability时,若目标Ability设为specified模式,需在目标Ability所属模块的module.json5文件中配置srcEntry属性,指向该模块的AbilityStage入口文件。


关键配置步骤

  1. 目标模块配置

    • 在目标模块的module.json5中,找到对应UIAbility配置项,添加"launchType": "specified"
    • 设置srcEntry属性指向本模块的AbilityStage文件路径:
      // 目标模块的module.json5示例
      {
        "module": {
          "name": "target_module",
          "srcEntry": "./ets/targetabilitystage/TargetAbilityStage.ets",
          "abilities": [{
            "name": "TargetAbility",
            "launchType": "specified"
          }]
        }
      }
      
  2. 实现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的bundleNameabilityName即可触发跨模块实例匹配逻辑。
  • 性能影响:通过合理设计Key生成规则(如结合业务参数),可在跨模块场景中精准控制实例复用,避免重复创建带来的性能损耗。