1-6.【Stage 模型】什么是 HAP?一个应用可以包含多个 HAP 吗?多 HAP 如何共享数据?是否存在跨 HAP 生命周期?

3 阅读2分钟

1️⃣ 什么是 HAP?

  • HAP(HarmonyOS Ability Package) 是 HarmonyOS 的 模块化打包单元,类似 Android 的 APK 或 iOS 的 Framework,但更加粒度化。
  • HAP 是 Ability(能力)+ 资源 + 配置 + 依赖库 的打包单元,可以独立开发、构建和加载。
  • 类型:
类型作用
Entry HAP应用启动入口,管理全局生命周期和初始化
Feature HAP具体业务功能模块,可按需加载
Library HAP公共工具库或 UI 组件库,不直接承载页面

✅ 核心理解:HAP = 模块化应用包 + Ability + 资源 + 生命周期管理


2️⃣ 一个应用可以包含多个 HAP 吗?

  • 可以。一个 HarmonyOS 应用通常包含多个 HAP:
MyApp
 ├─ Entry HAP
 ├─ Feature HAP A
 ├─ Feature HAP B
 └─ Library HAP X
  • 优势

    1. 模块化开发:多人协作,每个 Feature 独立开发、测试、部署
    2. 按需加载:减少应用初始包体积
    3. 多设备适配:不同设备加载不同 HAP

3️⃣ 多 HAP 如何共享数据

多 HAP 数据共享主要有几种方式:

方法场景说明
Data Ability / DataBus跨模块数据读写数据库或内存共享接口,支持 CRUD 和监听
全局状态 / 单例ArkTS @Provide/@Consume跨 HAP 共享状态,适合轻量数据
Service HAP后台任务或业务能力复用Feature 注册 Service,其他模块通过 AbilityManager 获取并调用
EventBus / Observer松耦合事件通知发布订阅模式,通知模块状态变化或事件触发
Intent / 参数传递页面跳转启动 Ability 时通过 Intent 携带参数,实现短期数据传递

💡 注意事项:

  • 大对象跨 HAP 传递需要序列化,可能影响性能
  • 状态同步尽量通过官方提供的 DataBus / Service / ArkTS 全局状态

4️⃣ 是否存在跨 HAP 生命周期?

  • HAP 本身是模块级别,生命周期是由 Ability 和 Stage 模型控制的:
情况生命周期说明
Ability 实例生命周期受系统管理:onCreate → onWindowStageCreate → onForeground ↔ onBackground → onDestroy
Feature HAP被加载时才会触发 Ability 生命周期,卸载时才会结束
Library HAP没有单独生命周期,只随宿主 Ability 运行
跨 HAP 状态迁移可以迁移 WindowStage 页面栈或 Service,但生命周期仍在源 HAP /目标 HAP 内独立管理

✅ 核心理解:不存在统一的跨 HAP 生命周期,不同 HAP 的 Ability 独立管理生命周期,通过 Service/DataBus/State 实现状态或数据共享。


🔹 总结

  1. HAP:模块化打包单元,包含 Ability + 资源 + 配置
  2. 多 HAP:一个应用可以包含 Entry、Feature、Library 多个 HAP
  3. 数据共享:Data Ability / DataBus / Service / 全局状态 / Intent
  4. 生命周期:Ability 生命周期独立,HAP 级别没有统一跨模块生命周期