在 HarmonyOS(尤其是版本 5+ 的 Stage 模型)中,UIAbility 是构建用户界面的核心组件,负责展示页面、管理界面生命周期,并与用户交互。以下是它的完整介绍🔍
1. 🧩 什么是 UIAbility?
- UIAbility 是 Stage 模型下的组件类型,继承自 Ability,是系统调度的基本单位。
- 主要用于 显示界面和处理用户交互,类似 Android 的 Activity 或 iOS 的 UIViewController。
- 每个 UIAbility 对应一个 WindowStage,用于管理界面窗口。
2. ⚙️ 生命周期(四大核心状态 + 窗口状态)
UIAbility 的生命周期由系统驱动,总共分为以下几个阶段:
- onCreate() – 初始化配置、获取 Context,不建议执行耗时任务
- onWindowStageCreate(windowStage) – 创建 UI 窗口,并通过
windowStage.loadContent("pages/YourPage")
加载页面内容 - onForeground() – UI 显示前,申请资源(如定位、传感器等)
- onBackground() – UI 隐藏后,释放资源并保存状态
- onWindowStageDestroy() – 窗口销毁前清理 UI 相关资源
- onDestroy() – Ability 完全销毁时释放剩余资源
3. 🚀 启动和页面跳转
- 通过
this.context.startAbility(want)
启动另一个 UIAbility(同 APP 或跨 APP) - 页面跳转则使用 ArkUI 的路由器,例如
router.pushUrl('pages/SecondPage', params)
与router.back()
来实现 。
4. 🛠 Context 获取与使用
在 Stage 模型中,直接使用
this.context
获取UIAbilityContext
,访问能力如启动 Ability、文件 I/O、资源获取等 。在页面中,可以通过
getUIContext().getHostContext()
获取 Ability 的 Context,如:const context = this.getUIContext().getHostContext() as UIAbilityContext; context.startAbility(want);
5. 🆚 Stage 模型 vs FA(旧模型)
特性 | Stage 模型 | FA 模型(旧) |
---|---|---|
核心单位 | UIAbility + WindowStage | FeatureAbility + AbilitySlice |
Context 获取 | this.context 直用 |
featureAbility.getContext() |
生命周期 | 全新生命周期状态 | 传统 Ability / Slice 生命周期 |
Stage 模型比老 FA 模型耦合更低、更灵活、更模块化,是 HarmonyOS 推荐的开发方式 。
✅ 实战建议 & 注意事项
UI 加载:务必在
onWindowStageCreate
中通过loadContent()
设置首屏页面,否则发布包可能白屏 。资源管理:
- 在
onForeground
中申请资源,如传感器定位 - 在
onBackground
中释放资源并保存数据 - 在
onDestroy
中做最后清理操作 ([DEV Community][4])。
- 在
Context 操作:如需文件读写、启动其他 Ability、关闭当前 Ability 等操作,统一用
this.context
。
🎯 总结
UIAbility 是 HarmonyOS Stage 模型下的页面能力组件,承载 UI 展示、用户交互和资源管理。了解其生命周期、Context 获取方式以及跳转机制,是掌握 HarmonyOS 原生开发的必备基础。