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
-
优势:
- 模块化开发:多人协作,每个 Feature 独立开发、测试、部署
- 按需加载:减少应用初始包体积
- 多设备适配:不同设备加载不同 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 实现状态或数据共享。
🔹 总结
- HAP:模块化打包单元,包含 Ability + 资源 + 配置
- 多 HAP:一个应用可以包含 Entry、Feature、Library 多个 HAP
- 数据共享:Data Ability / DataBus / Service / 全局状态 / Intent
- 生命周期:Ability 生命周期独立,HAP 级别没有统一跨模块生命周期