OpenHarmony Ability“全家桶”彻底拆解:从UIAbility到ExtensionAbility一文说清楚
1. 模型定位与演进
方向 | FA(API≤8) | Stage(API≥9) |
---|---|---|
设计目标 | 轻量化单设备 | 复杂多设备、低内存、原生分布式 |
核心思想 | Ability = UI + 业务 | UI 与 Ability 解耦,统一进程共享引擎,组件级迁移 |
能力边界 | 固定三种 Ability | 可无限派生 ExtensionAbility,系统能力即插即用 |
FA 模型中固定的 Page、Service、Data 三种类型不同,
Stage 模型将 Ability 主要分为两大类:UIAbility 和ExtensionAbility
OpenHarmony 自 API 9 版本起引入了全新的应用模型——Stage 模型,它标志着 OpenHarmony 应用开发框架的一次重大演进,后面版本都是主推Stage模型
2. 架构总览
2.1 进程与 VM
- 统一主进程:同一 Bundle 内所有 UIAbility + ServiceExtensionAbility + DataShareExtensionAbility 共享 1 个 ArkTS 引擎
- 独立进程(可配置):Form、InputMethod、Wallpaper、WebView 渲染进程等,崩溃隔离 & 权限最小化。
2.2 生命周期解耦
UIAbility 生命周期:Create → Foreground → Background → Destroy
WindowStage 生命周期:Create → SHOWN/RESUMED → PAUSED → HIDDEN → Destroy
进入多任务仅 WindowStage 触发 PAUSED,UIAbility 仍 Foreground → 可继续播放音频。
3. Ability 分类与职责
3.1 UIAbility(有界面)
UIAbility 作为 Stage 模型中承载用户界面的核心组件,是构建任何 OpenHarmony 应用的基础。它不仅是应用与用户进行视觉和交互沟通的桥梁,也是应用生命周期管理的关键节点。一个应用可以包含一个或多个 UIAbility,每个
UIAbility 实例都对应一个独立的任务栈,负责管理其内部页面的导航和状态。深入理解 UIAbility
的核心概念、生命周期、应用场景以及启动模式。
回调 | 触发时机 | 必做/禁做 |
---|---|---|
onCreate(want) | 实例新建 | 只读一次性初始化;禁止 loadContent |
onWindowStageCreate(ws) | 窗口 ready | 必须 ws.loadContent();获取 Window 对象 |
onForeground() | 切到前台 | 申请相机、定位等“可见时才需”资源 |
onBackground() | 切到后台 | 释放相机、停止动画;可持久化数据 |
onNewWant(want) | 热启动再次调用 | 解析参数并刷新 UI |
onWindowStageDestroy() | 窗口即将销毁 | 反注册窗口监听器 |
onDestroy() | 实例即将销毁 | 释放所有资源、注销监听器 |
启动模式(module.json5 字段 launchType
)
- standard:每次 startAbility 新建实例 → 多窗口浏览器
- singleton:全局唯一;再次启动清栈置顶 → 登录页、设置页
- specified:系统先回调 AbilityStage.onAcceptWant(want) → 返回 Key;相同 Key 复用实例 → 文档编辑器“同一文件单实例”
3.2 ExtensionAbility(无UI界面,派生类)
派生类 | 专属回 |
---|