当前位置: 首页 > news >正文

HarmonyOS UIAbility 组件完全指南:生命周期与开发基础

引言

在 HarmonyOS 应用开发中,UIAbility 是包含用户界面的核心应用组件,负责与用户交互、管理界面生命周期、处理用户操作以及协调页面跳转与数据传递。无论是通过桌面图标启动应用,还是从最近任务列表返回应用,这些交互都基于 UIAbility 实现。本节课将系统讲解 UIAbility 的基础概念、完整生命周期流程、工程目录结构以及 UIAbility 的创建与页面配置方法。

核心内容

UIAbility 基础概念

定义:UIAbility 是 HarmonyOS 中一种包含用户界面的应用组件,核心作用是与用户交互,负责管理界面生命周期、处理用户操作、协调页面跳转与数据传递。

核心定位:UIAbility 是系统调度应用的单元,每一个 UIAbility 实例会在最近任务列表中对应一个任务项,并且会为界面绘制提供独立窗口。

应用场景示例

  • 天气应用:打开应用后主界面由 UIAbility 管理,同时在最近任务列表生成对应任务项。

  • 桌面点击图标启动应用、从最近任务列表返回应用,界面交互都基于 UIAbility 实现。

UIAbility 生命周期流程

掌握 UIAbility 的生命周期对于应用开发非常重要。UIAbility 组件的核心生命周期包括CreateForegroundBackgroundDestroy四个状态。作为包含 UI 的应用组件,UIAbility 的生命周期与 WindowStage 的生命周期存在联系。

完整生命周期流程

UIAbility Start → Create → WindowStageCreate → Foreground ⇄ Background → WindowStageWillDestroy → WindowStageDestroy → Destroy → UIAbility End
各生命周期回调详解

1.onCreate(want: Want, launchParam: AbilityConstant.LaunchParam)

  • 触发时机:UIAbility 实例创建完成时触发。

  • 开发用途:应用预初始化,进行变量定义、全局资源加载,为后续 UI 展示做准备。

export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { // 应用初始化阶段,可以进行资源加载 // ... } // ... }

2.onWindowStageCreate(windowStage: window.WindowStage)

  • 触发时机:WindowStage 创建完成后触发,每个 UIAbility 实例会绑定一个 WindowStage。

  • 概念补充:WindowStage 是 UIAbility 的窗口管理器,负责窗口创建、销毁、显示与属性控制,持有主窗口为 UI 提供绘制区域。

  • 开发用途:加载 UI 页面、订阅 WindowStage 事件(如获焦/失焦、可见/不可见)。

onWindowStageCreate(windowStage: window.WindowStage) { // 设置 UI 页面加载 // 设置 WindowStage 的事件订阅(获焦/失焦、可见/不可见) // ... windowStage.loadContent('pages/Index', (err, data) => { // ... }); }

3.onForeground()

  • 触发时机:UIAbility 切换至前台、UI 渲染完成前触发。

  • 开发用途:申请系统需要的资源,或者重新申请在onBackground中释放的资源。

  • 示例:需要获取用户定位时,在该回调中开启定位功能获取位置。

onForeground() { // 申请系统需要的资源,或者重新申请在 onBackground 中释放的资源 // ... }

4.onBackground()

  • 触发时机:UIAbility 切换至后台,UI 完全不可见后触发。

  • 开发用途:释放 UI 页面不可见时无用的资源、保存应用状态,降低系统资源消耗。

  • 示例:定位应用切后台后,在该回调中停止定位节省资源。

onBackground() { // 释放 UI 页面不可见时无用的资源,或者在此回调中执行较为耗时的操作 // 例如状态保存等 // ... }

5.onWindowStageWillDestroy()

  • 触发时机:WindowStage 销毁前触发,此时 WindowStage 仍可使用。

  • 开发用途:释放通过 WindowStage 对象获取的资源,注销 WindowStage 的事件订阅。

onWindowStageWillDestroy() { // 释放通过 windowStage 对象获取的资源 // ... }

6.onWindowStageDestroy()

  • 触发时机:WindowStage 销毁后执行,此时 WindowStage 不可再使用。

  • 开发用途:释放 UI 相关资源,注销获焦失焦等 WindowStage 事件。

7.onDestroy()

  • 触发时机:UIAbility 实例销毁前触发(如用户从最近任务列表关闭应用)。

  • 开发用途:释放系统资源、保存应用数据等收尾工作。

onDestroy() { // 系统资源的释放、数据的保存等 // ... }

HarmonyOS 工程目录结构

文件类型说明
配置文件包含应用级和 Module 级配置:AppScope > app.json5存储全局配置(应用 Bundle 名称、应用名称、应用图标、应用版本号等);AppScope > resources存放应用全局需要的资源文件
ArkTS 源码文件Module_name > src > main > ets存放当前 Module 的 ArkTS 源代码(.ets文件)
资源文件Module_name > src > main > resources存放应用需要的各类资源,支持图形、多媒体、字符串、布局文件等
其他配置文件编译构建相关配置:build-profile.json5(工程/Module 级构建配置,包含应用签名、产品配置)、hvigorfile.ts(编译构建任务脚本)、obfuscation-rules.txt(混淆规则)、oh-package.json5(存储依赖库信息,包含第三方库和共享包依赖)

UIAbility 开发基本用法

创建 UIAbility 步骤
  1. 在工程根目录右键,点击New

  2. 点击Module进入新建 Module 流程。

  3. 选择Empty Ability模板,点击Next

  4. 配置 Module 名称、类型、支持设备类型。

  5. 设置 UIAbility 名称,配置exported属性(标识当前 UIAbility 是否可被其他应用拉起)。

  6. 点击Finish完成创建。

UIAbility 配置说明

module.json5ability节点中配置:

属性说明
nameUIAbility 组件的类名
srcEntryUIAbility 组件的代码路径
descriptionUIAbility 组件的描述信息
icon/labelUIAbility 的图标和显示名称
创建页面与指定启动页
  • 入口页面:新建工程默认在pages目录生成Index.ets作为 UIAbility 的入口页面,一个页面有且仅有一个@Entry装饰的入口组件。

  • 新建页面:右键pages目录新建.ets页面文件,需要在路由配置文件中手动添加路由信息。

  • 指定启动页:必须在onWindowStageCreate回调中通过windowStage.loadContent()指定启动页面,否则应用启动后会出现白屏。默认创建 UIAbility 时会自动加载pages/Index,需要修改时替换方法中的页面路径即可。

总结

本节课学习了 UIAbility 组件的基础知识:

  1. UIAbility 定义:包含用户界面的应用组件,用于与用户交互,是系统调度的单元,提供窗口用于界面绘制,每个实例对应最近任务列表中的一个任务项。

  2. 生命周期流程:完整的生命周期为Create → WindowStageCreate → Foreground ⇄ Background → WindowStageWillDestroy → WindowStageDestroy → Destroy。每个回调都有特定的触发时机和开发用途,掌握这些是 HarmonyOS 开发的核心考点。

  3. 工程目录结构:包括配置文件(app.json5)、ArkTS 源码文件(ets目录)、资源文件(resources目录)以及编译构建配置文件(build-profile.json5hvigorfile.tsobfuscation-rules.txtoh-package.json5)。

  4. UIAbility 开发基本用法:通过Empty Ability模板创建 UIAbility,在module.json5中配置相关属性;页面创建后需在路由配置文件中添加路由信息;必须在onWindowStageCreate中调用loadContent指定启动页,否则会出现白屏。

http://www.jsqmd.com/news/1343599/

相关文章:

  • 从零构建文件头识别库:原理、实现与Python实战
  • 构建AI智能体全链路安全治理体系:从风险分析到实战部署
  • Android源码本地化:从环境搭建到高效阅读的完整指南
  • AI绘画实战:用SD2技术实现动态复杂场景生成
  • LAV Filters终极指南:Windows平台开源解码器的5个核心技术架构与实战配置技巧
  • Unity游戏内嵌浏览器:ZFBrowser集成与中文输入法修复实战
  • 数字孪生技术架构与工业设备预测性维护实践
  • C++ GUI开发实战:主流库选型对比与Qt入门指南
  • Python字典深度解析:从哈希表原理到文件列表格式化实战
  • 串口通讯深度解析:从基础原理到Seriwavescope高效调试实践
  • 2026年近期浙江法兰绒厂商直联指南:源头实力工厂筛选与对接策略 - 装修教育财税推荐2026
  • Ubuntu安装WPS后中文字体缺失?三步解决跨平台文档兼容性问题
  • 微信小游戏玩法路线图设计:从认知心理学到工程实践
  • Spring Boot集成GaussDB实战:驱动配置、连接池优化与SQL兼容性处理
  • Unity桌面宠物开发:实现透明窗口与鼠标穿透的完整指南
  • Keil工程迁移VsCode:彻底解决头文件报错与配置同步
  • 三月七小助手:星穹铁道自动化助手终极指南 - 解放双手的智能游戏管家
  • LNCS模板官方下载与配置指南:LaTeX与Word版本选择与避坑
  • StarVCenter避坑部署全指南:从零搭建开源虚拟化管理平台
  • JVM性能调优实战:新生代与老年代比例设置原理与优化指南
  • Linux系统下Elasticsearch 8.X生产环境部署与配置实战指南
  • D2DX:三步安装让暗黑破坏神2在现代PC上焕发新生的终极高清补丁
  • ZYNQ PS端纯软件主站实现125μs稳定周期的关键技术解析
  • 《以太与铁》Demo试玩:文本驱动的CRPG如何平衡叙事深度与游戏体验
  • 华为应用市场上架全流程实战指南:从账号注册到审核避坑
  • 深入解析fio:从核心原理到实战的存储性能测试指南
  • Qt QLabel图片自适应:原理、方案与实战技巧
  • 复旦类脑智能研究院研究生申请:超越985/211标签,聚焦数理基础与科研潜力
  • 西门子S7-1200 PLC接线实战:从电源、I/O到扩展模块的完整指南
  • 概率整型技术:用可控误差换取极致能效的边缘AI计算方案