1-5.【Stage 模型】Stage 模型下,Entry / Feature / Library 的职责划分是什么?

3 阅读3分钟

Stage 模型下,Entry / Feature / Library 的职责划分是什么?Feature 模块如何被按需加载?多 HAP 如何通信?

1️⃣ Stage 模型下 HAP 模块的职责划分

HarmonyOS 项目可以分为 Entry / Feature / Library 三类 HAP 模块:

模块类型主要职责典型内容备注
Entry HAP应用入口模块MainAbility、全局配置、App 生命周期管理每个应用必须有一个 Entry,负责应用启动和初始化全局能力。
Feature HAP功能模块(按需加载)具体业务页面、UIAbility、PageAbility、服务可以独立打包,按需加载,减少初始包体积。
Library HAP公共依赖模块工具类、业务逻辑组件、UI 组件库不直接承载页面,可被 Entry/Feature 引用;通常是静态库或共享库。

✅ 核心理解:

  • Entry HAP:全局能力 + 应用启动入口
  • Feature HAP:业务功能模块,可动态加载
  • Library HAP:通用工具库,不依赖界面生命周期

2️⃣ Feature 模块如何按需加载

按需加载 Feature 的原理

  1. 动态 HAP 加载

    • Feature HAP 被打包成独立模块(.hap 文件)。
    • 在运行时通过 Ability Manager + Stage 模型 请求加载。
  2. 流程

EntryAbility (UIAbility)
     └── 调用 loadFeature("FeatureA")
             ├─ 系统检查 FeatureA 是否已安装/解压
             ├─ 加载 FeatureA 的 Ability / WindowStage
             └─ 页面或服务被实例化
  1. 优势
  • 减少应用冷启动包体积
  • 延迟加载用户未访问的功能
  • 支持模块化开发、多人协作、灰度发布
  1. 注意事项
  • Feature HAP 内的 Ability 必须通过 Entry HAP 进行启动(启动桥接)。
  • 数据和状态可以通过 Service / DataBus / global state 与 Entry 或其他 Feature 共享。

3️⃣ 多 HAP 如何通信

多 HAP(Entry + 多 Feature + Library)通信主要有以下方式:

通信方式场景说明
Ability 调用跨 HAP 页面跳转使用 startAbility(Intent) 启动 Feature HAP 的 Ability,可携带参数和数据
Data Ability / DataBus跨模块数据共享数据库或内存共享接口,支持 CRUD 操作和数据监听
全局状态管理跨 Feature 状态同步通过全局单例或 ArkTS 全局状态对象(如 @Provide/@Consume)
Service HAP后台任务或能力复用Feature 可以注册 Service,其他模块通过 AbilityManager 获取 Service 接口调用
EventBus / Observer松耦合通知发布/订阅模式,用于广播事件或状态变化通知

✅ 核心原则:

  • 尽量通过 AbilityManager 和系统能力桥接,避免直接依赖 HAP 文件路径
  • 跨 HAP 数据传输尽量轻量化,避免大对象跨模块序列化性能损耗

4️⃣ 总结

  1. 模块职责划分
  • Entry:应用启动 + 全局能力
  • Feature:业务功能模块,可按需加载
  • Library:公共工具/组件库
  1. Feature 按需加载
  • 动态 HAP 加载,通过 AbilityManager / Stage 模型实例化 Ability
  • 减少初始包体积,支持模块化与灰度发布
  1. 多 HAP 通信方式
  • Ability 调用(页面跳转)
  • Data Ability / DataBus(数据共享)
  • 全局状态管理(ArkTS @Provide/@Consume)
  • Service HAP(后台能力复用)
  • EventBus / Observer(松耦合事件通知)