HarmonyOS应用开发学习笔记 UIAbility组件与UI的数据同步 EventHub、globalThis

1、 HarmoryOS Ability页面的生命周期
2、 @Component自定义组件
3、HarmonyOS 应用开发学习笔记 ets组件生命周期
4、HarmonyOS 应用开发学习笔记 ets组件样式定义 @Styles装饰器:定义组件重用样式 @Extend装饰器:定义扩展组件样式
5、HarmonyOS 应用开发学习笔记 state状态管理概述
6、HarmonyOS应用开发学习笔记 包名、icon图标,应用名修改 UIAbility组件介绍、UIAbility启动模式、UIAbility组件基本用法

基于HarmonyOS的应用模型,可以通过以下两种方式来实现UIAbility组件与UI之间的数据同步。

项目描述
EventHub基于发布订阅模式来实现,事件需要先订阅后发布,订阅者收到消息后进行处理。
globalThisArkTS引擎实例内部的一个全局对象,在ArkTS引擎实例内部都能访问。

一、使用EventHub进行数据通信

EventHub和android EventBus很类似,三部曲:

1、EventHub 声明订阅

EventHub.on()
参数名类型必填说明
eventstring事件名称。
callbackFunction事件回调,事件触发后运行。
        this.context.eventHub.on('123', this.func1);this.context.eventHub.on('123', () => {console.log('call anonymous func 1');});

2、EventHub 发送消息,订阅回调

EventHub.emit()
参数名类型必填说明
eventstring事件名称。
…argsObject[]可变参数,事件触发时,传递给回调函数的参数。
  this.context.eventHub.emit('123');this.context.eventHub.emit('123', 1);this.context.eventHub.emit('123', 1, 2);  

3、EventHub 取消订阅

EventHub.off()
参数名类型必填说明
eventstring事件名称。
callbackFunction事件回调。如果不传callback,则取消订阅该事件下所有callback。
        this.context.eventHub.on('123', this.func2);//取消指定方法的订阅this.context.eventHub.off('123');  //取消订阅"123"

4、示例

  • 订阅
import UIAbility from '@ohos.app.ability.UIAbility';const TAG: string = '[Example].[Entry].[EntryAbility]';export default class EntryAbility extends UIAbility {func1(...data) {// 触发事件,完成相应的业务操作console.info(TAG, '1. ' + JSON.stringify(data));}onCreate(want, launch) {// 获取eventHublet eventhub = this.context.eventHub;// 执行订阅操作eventhub.on('event1', this.func1);eventhub.on('event1', (...data) => {// 触发事件,完成相应的业务操作console.info(TAG, '2. ' + JSON.stringify(data));});}
}
  • 发送消息
import common from '@ohos.app.ability.common';@Entry
@Component
struct Index {private context = getContext(this) as common.UIAbilityContext;eventHubFunc() {// 不带参数触发自定义“event1”事件this.context.eventHub.emit('event1');// 带1个参数触发自定义“event1”事件this.context.eventHub.emit('event1', 1);// 带2个参数触发自定义“event1”事件this.context.eventHub.emit('event1', 2, 'test');// 开发者可以根据实际的业务场景设计事件传递的参数}// 页面展示build() {// ...}
}
  • 取消订阅
// context为UIAbility实例的AbilityContext
this.context.eventHub.off('event1');

二、使用globalThis进行数据同步

globalThis是ArkTS引擎实例内部的一个全局对象,引擎内部的UIAbility/ExtensionAbility/Page都可以使用,因此可以使用globalThis全局对象进行数据同步。
使用globalThis进行数据同步

1、使用

//数据存入globalThis中globalThis.xxx= aa;
//需要使用的地方调用
let a=globalThis.xxx

AbilityA中保存数据一个字符串数据并挂载到globalThis上。

import UIAbility from '@ohos.app.ability.UIAbility'export default class AbilityA extends UIAbility {onCreate(want, launch) {globalThis.entryAbilityStr = 'AbilityA'; // AbilityA存放字符串“AbilityA”到globalThis// ...}
}

AbilityB中获取对应的数据

import UIAbility from '@ohos.app.ability.UIAbility'export default class AbilityB extends UIAbility {onCreate(want, launch) {// AbilityB从globalThis读取name并输出console.info('name from entryAbilityStr: ' + globalThis.entryAbilityStr);// ...}
}

组件之间也是如此

2、globalThis使用的注意事项

在这里插入图片描述

1) 存放名称不要相同

  • Stage模型下进程内的UIAbility组件共享ArkTS引擎实例,使用globalThis时需要避免存放相同名称的对象。例如AbilityA和AbilityB可以使用globalThis共享数据,在存放相同名称的对象时,先存放的对象会被后存放的对象覆盖。

2)用完将其赋值为null,以减少对应用内存的占用。

  • 对于绑定在globalThis上的对象,其生命周期与ArkTS虚拟机实例相同,建议在使用完成之后将其赋值为null,以减少对应用内存的占用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/344354.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM基础(8)——CMS垃圾回收器

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

MES管理系统解决方案在汽配企业中的重要性

在汽车制造业中,MES管理系统解决方案已成为引领精益生产的关键要素。该系统专注于监控和管理汽车生产流程,利用实时数据分析和采集技术,为企业提供了提高效率、降低成本和确保高质量产品的有效手段。本文将详细介绍汽配企业MES管理系统的特点…

轻量化的yolov8部署到安卓Android手机端

一、pytorch环境配置和yolov8源码安装 首先在电脑上需要配置好pytorch环境,和yolov8源码的下载 然后针对yolov8做自己的轻量化改进 二、下载Android Studio和ncnn-android-yolov8 1. Android Studio官网链接: 下载 Android Studio 和应用工具 - And…

UE5 简易MC教程学习心得

https://www.bilibili.com/video/BV12G411J7hV?p13&spm_id_frompageDriver&vd_sourceab35b4ab4f3968642ce6c3f773f85138 ———— 目录 0.摧毁逻辑学习 1.发光材质灯方块 2.封装。想让子类 不更改父类的变量。 3.材质命名习惯。 0.摧毁逻辑学习 达到摧毁的条件…

在线海报图片设计器、图片编辑器,仿照稿定设计

源码介绍 在线海报设计系统素材设计源码是一个漂亮且功能强大的在线海报图片设计器,仿照稿定设计而成。该系统适用于多种场景,包括海报图片生成、电商分享图、文章长图、视频/公众号封面等。用户无需下载软件,即可轻松实现创意,迅…

2000年第五次人口普查数据,shp/excel格式均有,划分年龄段、性别占比等字段

基本信息. 数据名称: 第五次人口普查数据 数据格式: Shp、excel 数据时间: 2000年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据来源:第五次人口普查数据 数据字段: 序号字段名称字段说明1a2000_zrks2000年_常住人口(人&…

Linux中安装字体

问题说明 wps 安装后打开文件部分字体出现乱码,原因主要是linux中缺少windows中的相关字体,只要从windows电脑中的字体拷贝到linux系统中并安装就能解决问题 对ubuntu 和manjora有效。 安装字体 字体下载地址可参考附录 在 Linux 中,一次…

【C++】C++11中的常见语法(下)

C11 一、可变参数模板1. 递归函数方式展开参数包2. 逗号表达式展开参数包3. STL容器中的 empalce 相关接口函数 二、lambda 表达式1. C98 中的一个例子2. 使用 lambda 表达式3. lambda 表达式语法(1)lambda 表达式各部分说明(2)捕…

通信电缆的UL认证安全标准UL 444详情介绍

在介绍相关标准之前先介绍一下UL认证和UL测试报告的区别 UL认证是自愿性的认证,需要检测产品和审核工厂,每个季度审核一次,费用高、时间久,而且审厂非常的严格。 UL测试报告是根据产品选用相应的UL标准进行测试合格后&#xff0…

JDBC初体验(二)

一、SQL注入 1.1 SQL注入原理 利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在web表单中输入(恶意的)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按…

stable diffusion使用相关

IP Adapter,我愿称之它为SD垫图 IP Adapter是腾讯lab发布的一个新的Stable Diffusion适配器,它的作用是将你输入的图像作为图像提示词,本质上就像MJ的垫图。 IP Adapter比reference的效果要好,而且会快很多,适配于各种…

EasyBill账单易版本更新--支持Alibaba Cloud阿里云国际站分销模式

EasyBill账单易针对进行阿里云国际站reseller模式分销业务的分销伙伴需求,现推出全新版本。阿里国际业务满足适配最新版Alibaba Cloud Channel Platform 平台,自动获取账单。此外还提供国际版常用地址,常用银行,汇率,税…