首页 > 其他分享 >华为鸿蒙 UIAbility 组件:构建用户界面的舞台

华为鸿蒙 UIAbility 组件:构建用户界面的舞台

时间:2024-10-21 13:33:27浏览次数:1  
标签:用户界面 鸿蒙 UIAbility 实例 hilog want 组件 Want

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

华为鸿蒙系统的阶段模型为开发者提供了一个强大的舞台,而 UIAbility 组件则是这个舞台上最核心的角色,负责构建用户界面并与用户进行交互。

一、UIAbility 组件的定义和功能

UIAbility 是华为鸿蒙系统中用于构建用户界面的应用组件,它负责创建和管理界面元素,响应用户操作,并与用户进行交互。UIAbility 组件可以包含一个或多个页面,每个页面都可以独立加载和卸载,方便地进行界面管理和功能扩展。
UIAbility 组件的主要功能

  • 界面渲染:UIAbility 组件可以使用 ArkUI 库提供的各种组件构建用户界面,例如按钮、文本、图片、列表等。
  • 事件处理:UIAbility 组件可以监听和处理各种用户事件,例如点击、触摸、滑动等。
  • 数据绑定:UIAbility 组件可以使用 Data Binding 框架将界面元素与数据模型进行绑定,实现数据驱动界面更新。
  • 生命周期管理:UIAbility 组件拥有完整的生命周期,包括创建、启动、运行、停止和销毁等状态,开发者可以监听这些生命周期事件并进行相应的处理。
  • 数据同步:UIAbility 组件可以使用多种方式与其他组件进行数据同步,例如 EventHub、AppStorage、LocalStorage 等。
    UIAbility 组件就像是舞台上的演员,通过展示丰富的界面元素和响应用户操作,为用户提供良好的交互体验

二、UIAbility 组件的生命周期管理

UIAbility 组件拥有完整的生命周期,包括以下几个状态:

  • Create:UIAbility 实例创建完成,系统调用 onCreate 回调。
  • Foreground:UIAbility 实例切换到前台,系统调用 onForeground 回调。
  • Background:UIAbility 实例切换到后台,系统调用 onBackground 回调。
  • Destroy:UIAbility 实例销毁,系统调用 onDestroy 回调。
    以下是一些与 UIAbility 组件生命周期相关的代码示例
import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 页面初始化
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  }
  onForeground(): void {
    // 申请系统需要的资源,或者重新申请在onBackground()中释放的资源
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  }
  onBackground(): void {
    // 释放UI不可见时无用的资源,或者在此回调中执行较为耗时的操作
    // 例如状态保存等
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }
  onDestroy(): void {
    // 系统资源的释放、数据的保存等
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }
}

开发者可以根据应用需求监听和处理 UIAbility 组件的生命周期事件,进行资源管理、数据同步等操作

三、UIAbility 组件的数据同步机制

UIAbility 组件可以使用多种方式与其他组件进行数据同步,例如 EventHub、AppStorage、LocalStorage 等。

  • EventHub:UIAbility 组件可以使用 EventHub 对象进行事件的发布和订阅,实现组件之间的数据通信。
  • AppStorage:UIAbility 组件可以使用 AppStorage 对象进行应用级别的状态管理,例如保存和读取配置信息、用户数据等。
  • LocalStorage:UIAbility 组件可以使用 LocalStorage 对象进行 UIAbility 级别的状态管理,例如保存和读取界面状态、用户输入等。
    以下是一些使用 EventHub 进行数据同步的代码示例
import { UIAbility, Context, Want, AbilityConstant } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 获取 eventHub
    let eventhub = this.context.eventHub;
    // 执行订阅操作
    eventhub.on('event1', this.eventFunc);
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  }
  // 事件处理函数
  eventFunc(argOne: Context, argTwo: Context): void {
    hilog.info(0x0000, 'testTag', '1. ' + `${argOne}, ${argTwo}`);
    return;
  }
}

开发者可以根据应用需求选择合适的数据同步方式,实现组件之间的数据同步和状态管理

四、UIAbility 组件的启动模式

UIAbility 组件支持三种启动模式:

  • singleton:单实例模式,系统中只有一个该类型的 UIAbility 实例。
  • multiton:多实例模式,系统中可以有多个该类型的 UIAbility 实例。
  • specified:指定实例模式,可以根据指定的 Key 值启动特定的 UIAbility 实例。
    以下是一些与 UIAbility 组件启动模式相关的代码示例
import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 获取 UIAbility 实例的上下文
    let context = this.context;
    // ...
  }
}
export default class SpecifiedAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 获取 UIAbility 实例的上下文
    let context = this.context;
    // ...
  }
}
// 在 EntryAbility 中启动 SpecifiedAbility
let want: Want = {
  deviceId: '', // deviceId为空表示本设备
  bundleName: 'com.example.myapplication',
  abilityName: 'SpecifiedAbility',
  moduleName: 'entry', // moduleName非必选
  parameters: {
    // 自定义信息
    instanceKey: 'uniqueKey'
  },
};
context.startAbility(want).then(() => {
  hilog.info(0x0000, 'testTag', 'Succeeded in starting SpecifiedAbility.');
}).catch((err: BusinessError) => {
  hilog.error(0x0000, 'testTag', `Failed to start SpecifiedAbility. Code is ${err.code}, message is ${err.message}`);
});

开发者可以根据应用需求选择合适的启动模式,实现 UIAbility 组件的灵活启动和管理

五、UIAbility 组件的实例模式和指定实例模式

UIAbility 组件支持两种实例模式:

  • default:默认实例模式,系统根据组件名称创建实例。
  • specified:指定实例模式,系统根据指定的 Key 值创建实例。
    以下是一些与 UIAbility 组件实例模式相关的代码示例
import { AbilityStage, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
export default class MyAbilityStage extends AbilityStage {
  onAcceptWant(want: Want): string {
    // 在被调用方的 AbilityStage 中,针对启动模式为 specified 的 UIAbility 返回一个 UIAbility 实例对应的
    // 一个 Key 值
    // 当前示例指的是 module1 Module 的 SpecifiedAbility
    if (want.abilityName === 'SpecifiedFirstAbility' || want.abilityName === 'SpecifiedSecondAbility') {
      // 返回的字符串 Key 标识为自定义拼接的字符串内容
      if (want.parameters) {
        return `SpecifiedAbilityInstance_${want.parameters.instanceKey}`;
      }
    }
    // ...
    return 'MyAbilityStage';
  }
}

我们可以根据应用需求选择合适的实例模式,实现 UIAbility 组件的灵活实例管理和数据同步
本篇博客介绍了华为鸿蒙 UIAbility 组件的定义、功能、生命周期管理、数据同步机制、启动模式和实例模式。后续文章将深入讲解 UIAbility 组件的具体使用方法和开发技巧
请注意,由于鸿蒙系统版本更新较快,部分功能可能存在变动,请以最新版本官方文档为准

标签:用户界面,鸿蒙,UIAbility,实例,hilog,want,组件,Want
From: https://www.cnblogs.com/samex/p/18489311

相关文章

  • 华为鸿蒙 Want:应用组件之间信息传递的桥梁
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在华为鸿蒙系统中,应用组件之间的信息传......
  • 华为鸿蒙嵌入式 UI 扩展组件:跨越界限的舞台
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在华为鸿蒙系统的舞台上,UIAbility组件......
  • 华为鸿蒙 AbilityStage 组件容器:Stage模型的舞台中心
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。华为鸿蒙系统的阶段模型为开发者提供了......
  • 内置免费图标!SymbolGlyphs|鸿蒙动效开发笔记 04|Extras
    这篇笔记将介绍HarmonyOSNEXT应用开发里非常好用的官方内置图标库和原生图标组件。妙用这套组合拳可以解决几乎一切UI设计资源上的问题,并且将开发的App与原生鸿蒙风格完美契合!补充资料:官方图标库网站:HarmonyOSSymbol主题图标库(不全)https://developer.huawei.co......
  • 用于快速创建机器学习模型的 Web 接口或用户界面的python库:gradio
    一、简介gradio是一个Python库,用于快速创建机器学习模型的Web接口或用户界面,主要优点是允许开发者通过少量的代码创建交互式的Web界面,用户能够上传输入数据并查看模型的输出结果。二、主要特性易于使用:只需几行代码就可以创建接口,不需要前端开发知识。支持多种输入......
  • 鸿蒙开发 四十九 数组
    1、数组的创建方式数组:接口范型的形式提供,接口的源码是:interfaceArray<T>,实际开发中数组用得非常多,创建数组的方式有:1、语法格式:let数组名:Array<数组类型>=[],实例:letarr1:Array<IObject>=[],这里申明IObject的数组,2,new关键字创建数组,语法格式:let数组名字:Arra......
  • HarmonyOS:UIAbility进阶
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • 鸿蒙ArkWeb 组件多媒体探究:从视频到音频
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言ArkWeb是华为鸿蒙系统提供的一......
  • 华为鸿蒙 Web 组件:高效调试策略
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言调试是软件开发过程中不可或缺的......
  • 【HarmonyOS】鸿蒙应用蓝牙功能实现 (一)
    【HarmonyOS】鸿蒙应用蓝牙功能实现前言蓝牙技术是一种无线通信技术,可以在短距离内传输数据。它是由爱立信公司于1994年提出的,使用2.4GHz的ISM频段,可以在10米左右的距离内进行通信。可以用于连接手机、耳机、音箱、键盘、鼠标、打印机等各种设备。特点是低功耗、低成本、简单易用......