AbilityKit 总览:从 Ability 模型理解 HarmonyOS 应用入口

本文基于华为 HarmonyOS 官方 AbilityKit 文档整理,按 CSDN 实战教程写法展开。
主题:AbilityKit 把应用入口、页面生命周期、上下文和系统交互统一起来。

文章导读

  • 适合读者:正在学习 HarmonyOS AbilityKit、ArkTS 工程结构和应用生命周期的开发者。
  • 本篇重点:UIAbility、AbilityStage、Want、Context、生命周期。
  • 建议阅读方式:先看图,再看代码,最后按解释检查自己的项目。

目录

  1. 明确本节目标
  2. 理解官方概念
  3. 建立最小工程结构
  4. 声明 Ability 配置
  5. 实现生命周期入口
  6. 加载 ArkUI 页面
  7. 传递业务参数
  8. 读取 Context 能力
  9. 处理前后台切换
  10. 处理重复启动
  11. 处理异常兜底
  12. 释放页面资源
  13. 补充工程封装
  14. 设计验证清单
  15. 本节小结与练习

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. 本节小结与练习

p

这一节围绕 本节小结与练习 展开。放到 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 当成应用入口、系统能力桥接层和工程边界来设计。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐