【HarmonyOS 5】鸿蒙中的UIAbility详解(一)

GeorgeGcs
• 阅读 2

##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、UIAbility是什么? Stage模型中的组件类型名,即UIAbility组件,包含UI,提供展示UI的能力,主要用于和用户交互。 UIAbility类似于传统移动开发Android中的Activity或者Fragment。类似IOS开发中的 UIViewController。 UIAbility 是 HarmonyOS 应用框架的核心组件,负责管理应用的用户界面生命周期和上下文信息。

二、设置指定启动页面 启动页面必须设置:否则应用启动后会白屏。 避免应用启动后白屏,需在onWindowStageCreate生命周期中设置默认加载页面。通过WindowStage的loadContent()方法指定页面路径。 export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { windowStage.loadContent('pages/Index', (err, data) => { /* 处理回调 */ }); } } DevEco Studio默认生成的项目会自动加载Index页面,可按需修改路径。 三、获取上下文信息(UIAbilityContext) 获取应用配置信息(如包名、Ability名称等),或调用操作Ability的方法(如启动、终止Ability)。通过this.context直接访问。 export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { const context = this.context; // 直接获取上下文 } } 在页面组件中获取: 通过getUIContext().getHostContext()转换为UIAbilityContext。 @Entry @Component struct Page { private context = this.getUIContext().getHostContext() as common.UIAbilityContext; startAbilityTest() { this.context.startAbility(want); } // 启动其他Ability } 启动页面设置与上下文使用代码示例 // UIAbility定义 export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage) { windowStage.loadContent('pages/Main', () => {}); // 设置启动页面 }

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { const context = this.context; // 获取上下文 context.startAbility({ abilityName: 'OtherAbility' }); // 启动其他Ability } }

// 页面组件中使用上下文 @Entry @Component struct MainPage { private context = this.getUIContext().getHostContext() as common.UIAbilityContext; build() { Button('终止当前Ability').onClick(() => this.context.terminateSelf()); } } 四、UIAbility生命周期与操作 UIAbility的生命周期包含 Create(创建)、Foreground(前台)、Background(后台)、Destroy(销毁) 四个核心状态,以及与窗口(WindowStage)相关的子状态。通过生命周期回调钩子函数,可监听状态变化并执行对应操作。 生命周期状态流转图 创建实例 窗口创建 进入前台 切到后台 窗口销毁 实例销毁 ↓ ↓ ↓ ↓ ↓ ↓ onCreate() → onWindowStageCreate() → onForeground() → onBackground() → onWindowStageDestroy() → onDestroy() ↑ ↖ ↗ ↖ ↑ └─────── WindowStageWillDestroy() ────────────────────────┘

1、onCreate UIAbility实例创建完成时触发。初始化页面数据、加载资源(如定义变量、获取上下文this.context)。 export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { // 初始化操作(如获取上下文、配置数据) const context = this.context; } } 2、WindowStageCreate UIAbility实例创建后,进入前台前,系统创建WindowStage时触发。设置启动页面(loadContent())、订阅窗口事件(如前后台切换、焦点变化)。

onWindowStageCreate(windowStage: window.WindowStage) {
  windowStage.loadContent('pages/Index'); // 设置启动页面
  windowStage.on('windowStageEvent', (event) => { // 订阅窗口事件
    switch (event) {
      case window.WindowStageEventType.SHOWN: // 切到前台
        console.log('窗口切到前台');
        break;
    }
  });
}

3、WindowStageWillDestroy WindowStage销毁前触发(此时窗口仍可用)。释放通过WindowStage获取的资源,注销事件订阅(off('windowStageEvent'))。 4、WindowStageDestroy WindowStage销毁时触发(UI资源释放)。释放UI相关资源(如临时文件、图形对象)。 5、Foreground UIAbility切换至前台、UI可见前触发。申请系统资源(如定位、传感器权限)、恢复后台释放的资源。 onForeground() { // 开启定位功能 location.start(); } 6、Background UIAbility切换至后台、UI完全不可见后触发。释放无用资源、执行耗时操作(如数据持久化)。 onBackground() { // 停止定位、保存当前状态 location.stop(); saveDataToLocal(); } 7、onDestroy UIAbility实例被终止时触发(如调用terminateSelf())。释放全局资源、清理内存(如关闭网络连接、注销监听器)。 onDestroy() { // 释放数据库连接、取消定时器 db.close(); clearInterval(timer); } 注意:API 13+中,若用户通过最近任务一键清理应用,不会触发onDestroy(),而是直接终止进程。

四、UIAbility的常用函数操作

  1. 终止UIAbility实例 调用terminateSelf()终止当前Ability。 context.terminateSelf((err) => { if (err) { console.error('终止失败:', err); } else { console.info('终止成功'); } });
  2. 获取拉起方信息 当UIAbilityA通过startAbility启动UIAbilityB时,UIAbilityB可获取调用方信息。 export default class UIAbilityB extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { console.log(调用方Pid: ${want.parameters?.['ohos.aafwk.param.callerPid']}); } } 跨Ability信息传递代码示例 // UIAbilityA中启动UIAbilityB @Entry @Component struct UIAbilityAPage { private context = this.getUIContext().getHostContext() as common.UIAbilityContext; build() { Button('拉起UIAbilityB').onClick(() => { this.context.startAbility({
     bundleName: this.context.abilityInfo.bundleName, 
     abilityName: 'UIAbilityB' 
    }); }); } }

// UIAbilityB中获取调用方信息 export default class UIAbilityB extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { console.log(调用方包名: ${want.parameters?.['ohos.aafwk.param.callerBundleName']}); } }

注意 当UIAbility设置为singleton启动模式时,重复调用startAbility()启动同一实例,不会重新走onCreate和onWindowStageCreate流程,而是触发onNewWant回调。 onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) { // 根据新的Want参数更新页面数据 this.data = want.parameters?.data; }

点赞
收藏
评论区
推荐文章
GeorgeGcs GeorgeGcs
13小时前
【 HarmonyOS 5 入门系列 】鸿蒙HarmonyOS示例项目讲解
【HarmonyOS5入门系列】鸿蒙HarmonyOS示例项目讲解\鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言:移动开发声明式UI框架的技术变革在移动操作系统的发展历程中,UI开发模式经历了从命令式到声明式的重大变革。根据
GeorgeGcs GeorgeGcs
13小时前
【HarmonyOS 5】AttributeModifier和AttributeUpdater区别详解
【HarmonyOS5】AttributeModifier和AttributeUpdater区别详解\鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、AttributeModifier和AttributeUpdater的定义和作用1
GeorgeGcs GeorgeGcs
4小时前
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言在HarmonyOS5的应用开发模型中,featureAbility是旧版FA模型(FeatureAbility)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文
GeorgeGcs GeorgeGcs
4小时前
【HarmonyOS 5】鸿蒙mPaaS详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、mPaaS是什么?mPaaS是MobilePlatformasaService的缩写,即移动开发平台。蚂蚁移动开发平台mPaaS,融合了支付宝科技能力,可以为移动应用开发、测试、运营及
GeorgeGcs GeorgeGcs
4小时前
【HarmonyOS 5】鸿蒙中的UIAbility详解(二)
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言今天我们继续深入讲解UIAbility,根据下图可知,在鸿蒙中UIAbility继承于Ability,开发者无法直接继承Ability。只能使用其两个子类:UIAbility和Ex
GeorgeGcs GeorgeGcs
4小时前
【HarmonyOS 5】鸿蒙中的UIAbility详解(三)
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙游戏类应用(游戏一、前言本文是鸿蒙中的UIAbility详解系列的最终章。主要针对UIAbility的冷启动和热启动,对于want数据的处理。UIAbility的备份恢复,UIAbility的接续等高级功能的
GeorgeGcs GeorgeGcs
4小时前
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、前言在HarmonyOS5的应用开发模型中,featureAbility是旧版FA模型(FeatureAbility)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文
GeorgeGcs GeorgeGcs
4小时前
【HarmonyOS 5】鸿蒙中@State的原理详解
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、@State在鸿蒙中是做什么的?@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式。通过将变量标记为@State
GeorgeGcs GeorgeGcs
2小时前
【HarmonyOS 5】如何开启DevEco Studio热更新调试应用模式
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、AttributeModifier和AttributeUpdater的定义和作用1.AttributeModifier是ArkUI组件的动态属性,提供属性设置功能。开发者可使用attr
GeorgeGcs GeorgeGcs
2小时前
【HarmonyOS 5】鸿蒙页面和组件生命周期函数
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财一、生命周期阶段:创建阶段build:构建组件的UI结构和样式。onDidBuild:build方法执行完毕后调用,可用于数据初始化或额外的UI调整。挂载阶段onPageShow:页面显示
GeorgeGcs
GeorgeGcs
Lv1
男 · 金融头部企业 · 鸿蒙应用架构师
HarmonyOS认证创作先锋,华为HDE专家,鸿蒙讲师,作者。目前任职鸿蒙应用架构师。 历经腾讯,宝马,研究所,金融。 待过私企,外企,央企。 深耕大应用开发领域十年。 AAE,Harmony(OpenHarmony\HarmonyOS),MAE(Android\IOS),FE(H5\Vue\RN)。
文章
56
粉丝
1
获赞
2