0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

HarmonyOS解决方案 ? 来源:HarmonyOS解决方案 ? 作者:HarmonyOS解决方案 ? 2025-07-07 14:36 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财#

一、UIAbility是什么?

Stage模型中的组件类型名,即UIAbility组件,包含UI,提供展示UI的能力,主要用于和用户交互。

UIAbility类似于传统移动开发Android中的Activity或者Fragment。类似IOS开发中的 UIViewController。

UIAbility 是 HarmonyOS 应用框架的核心组件,负责管理应用的用户界面生命周期和上下文信息。

二、设置指定启动页面

启动页面必须设置 :否则应用启动后会白屏。

避免应用启动后白屏,需在onWindowStageCreate生命周期中设置默认加载页面。通过WindowStageloadContent()方法指定页面路径。

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()启动同一实例, 不会重新走onCreateonWindowStageCreate流程 ,而是触发onNewWant回调。

onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) {
  // 根据新的Want参数更新页面数据
  this.data = want.parameters?.data; 
}

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    60

    文章

    2643

    浏览量

    44237
  • HarmonyOS
    +关注

    关注

    80

    文章

    2128

    浏览量

    33399
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入理解HarmonyOS UIAbility:生命周期、WindowStage与启动模式探析

    UIAbility组件概述 UIAbility组件是HarmonyOS种包含UI界面的应用组件,主要用于与用户进行交互。每个UIAbility
    的头像 发表于 02-17 15:33 ?2306次阅读
    深入理解<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>UIAbility</b>:生命周期、WindowStage与启动模式探析

    HarmonyOS开发案例:【UIAbility内和UIAbility间页面的跳转】

    基于Stage模型下的UIAbility开发,实现UIAbility内和UIAbility间页面的跳转。
    的头像 发表于 05-09 15:06 ?2243次阅读
    <b class='flag-5'>HarmonyOS</b>开发案例:【<b class='flag-5'>UIAbility</b>内和<b class='flag-5'>UIAbility</b>间页面的跳转】

    HarmonyOS/OpenHarmony应用开发-Stage模型UIAbility组件使用(

    UIAbility组件可以通过多个页面来实现个功能模块。每UIAbility组件实例,都对应于
    发表于 06-28 10:32

    HarmonyOS/OpenHarmony应用开发-Stage模型UIAbility组件使用(

    UIAbility组件可以通过多个页面来实现个功能模块。每UIAbility组件实例,都对应于
    发表于 06-28 10:32

    HarmonyOS 5 makeObserved接口详解

    HarmonyOS 5】makeObserved接口详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 06-16 17:58 ?317次阅读

    HarmonyOS 5鸿蒙应用隐私保护详解

    HarmonyOS 5鸿蒙应用隐私保护详解 ##鸿蒙开发能力 ##HarmonyOS SDK
    的头像 发表于 07-11 18:30 ?389次阅读

    HarmonyOS 5鸿蒙中进度条的使用详解

    HarmonyOS 5鸿蒙中进度条的使用详解 ##鸿蒙开发能力 ##HarmonyOS SD
    的头像 发表于 07-11 18:26 ?275次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b>中进度条的使用<b class='flag-5'>详解</b>

    HarmonyOS 5鸿蒙星闪NearLink详解

    HarmonyOS 5鸿蒙星闪NearLink详解 ##鸿蒙开发能力 ##HarmonyOS
    的头像 发表于 07-11 18:24 ?406次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b>星闪NearLink<b class='flag-5'>详解</b>

    HarmonyOS 5鸿蒙mPaaS详解

    HarmonyOS 5鸿蒙mPaaS详解 ##鸿蒙开发能力 ##HarmonyOS SDK应
    的头像 发表于 07-11 18:23 ?320次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b>mPaaS<b class='flag-5'>详解</b>

    HarmonyOS 5】金融应用开发鸿蒙组件实践

    HarmonyOS 5】金融应用开发鸿蒙组件实践 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:20 ?341次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】金融应用开发<b class='flag-5'>鸿蒙</b>组件实践

    HarmonyOS 5鸿蒙UIAbility详解(三)

    HarmonyOS 5鸿蒙UIAbility详解(三) ##
    的头像 发表于 06-14 22:32 ?103次阅读

    HarmonyOS 5鸿蒙UIAbility详解(二)

    HarmonyOS 5鸿蒙UIAbility详解(二) ##
    的头像 发表于 07-11 18:17 ?328次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b><b class='flag-5'>中</b>的<b class='flag-5'>UIAbility</b><b class='flag-5'>详解</b>(二)

    HarmonyOS 5】桌面快捷方式功能实现详解

    HarmonyOS 5】桌面快捷方式功能实现详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 06-21 16:42 ?327次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】桌面快捷方式功能实现<b class='flag-5'>详解</b>

    鸿蒙Stage模型与FA模型详解

    HarmonyOS 5鸿蒙Stage模型与FA模型详解 ##鸿蒙开发能力 ##
    的头像 发表于 07-07 11:50 ?233次阅读

    鸿蒙应用px,vp,fp概念详解

    HarmonyOS 5鸿蒙应用px,vp,fp概念详解 ##鸿蒙开发能力 ##HarmonyOS
    的头像 发表于 07-07 11:48 ?252次阅读
    <b class='flag-5'>鸿蒙</b>应用px,vp,fp概念<b class='flag-5'>详解</b>