AbilityKit 总览:从 Ability 模型理解 HarmonyOS 应用入口
AbilityKit 总览:从 Ability 模型理解 HarmonyOS 应用入口
本文基于华为 HarmonyOS 官方 AbilityKit 文档整理,按 CSDN 实战教程写法展开。
主题:AbilityKit 把应用入口、页面生命周期、上下文和系统交互统一起来。
文章导读
- 适合读者:正在学习 HarmonyOS AbilityKit、ArkTS 工程结构和应用生命周期的开发者。
- 本篇重点:UIAbility、AbilityStage、Want、Context、生命周期。
- 建议阅读方式:先看图,再看代码,最后按解释检查自己的项目。
目录
- 明确本节目标
- 理解官方概念
- 建立最小工程结构
- 声明 Ability 配置
- 实现生命周期入口
- 加载 ArkUI 页面
- 传递业务参数
- 读取 Context 能力
- 处理前后台切换
- 处理重复启动
- 处理异常兜底
- 释放页面资源
- 补充工程封装
- 设计验证清单
- 本节小结与练习
1. 明确本节目标

这一节围绕 明确本节目标 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 1 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
2. 理解官方概念

这一节围绕 理解官方概念 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 2 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
3. 建立最小工程结构

这一节围绕 建立最小工程结构 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 3 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
4. 声明 Ability 配置

这一节围绕 声明 Ability 配置 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 4 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
5. 实现生命周期入口

这一节围绕 实现生命周期入口 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 5 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
6. 加载 ArkUI 页面

这一节围绕 加载 ArkUI 页面 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 6 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
7. 传递业务参数

这一节围绕 传递业务参数 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 7 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
8. 读取 Context 能力

这一节围绕 读取 Context 能力 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 8 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
9. 处理前后台切换

这一节围绕 处理前后台切换 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 9 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
10. 处理重复启动

这一节围绕 处理重复启动 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 10 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
11. 处理异常兜底

这一节围绕 处理异常兜底 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 11 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
12. 释放页面资源

这一节围绕 释放页面资源 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 12 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
13. 补充工程封装

这一节围绕 补充工程封装 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 13 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
14. 设计验证清单

这一节围绕 设计验证清单 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 14 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
15. 本节小结与练习

这一节围绕 本节小结与练习 展开。放到 AbilityKit 里看,它对应的是 UIAbility、AbilityStage、Want、Context、生命周期 中的一个落地点。写 CSDN 文章时,这里不要只写概念,要说明它在真实 HarmonyOS 项目中的位置。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
console.info('Ability created', JSON.stringify(want.parameters ?? {}));
}
}
代码解释:
这段代码展示了本节最小可运行思路。第一步是明确 Ability 入口或上下文来源,第二步是把系统回调中的参数转成业务状态,第三步是在异常或生命周期切换时做好兜底。第 15 个小节建议读者把代码复制到自己的 Demo 中验证。
实战注意:
- 不要把所有逻辑都写在页面组件里,Ability 层只负责入口、生命周期和系统能力衔接。
- 需要跨页面传递的数据优先放到
Want.parameters,复杂对象建议只传 id,再到业务层读取详情。 - 涉及前后台切换时,要检查资源释放、重复进入和异常兜底。
参考资料
结语
这一篇围绕 UIAbility、AbilityStage、Want、Context、生命周期 做了 15 个实战拆解。真正写项目时,不要只背生命周期名称,而要把 Ability 当成应用入口、系统能力桥接层和工程边界来设计。
更多推荐



所有评论(0)