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

news2024/9/23 19:26:36

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) {
        // 获取eventHub
        let 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.coloradmin.cn/o/1368211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基础知识点(九-POSIX信号量)

目录 一、基本概念 二、有名信号量 三、无名信号量 一、基本概念 信号量(Semaphore)是一种实现进程/线程间通信的机制,可以实现进程/线程之间同步或临界资源的互斥访问, 常用于协助一组相互竞争的进程/线程来访问临界资源。在多…

洛谷 P1217 [USACO1.5] 回文质数 Prime Palindromes 刷题笔记

P1217 [USACO1.5] 回文质数 Prime Palindromes - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 直接枚举 减枝优化判断 优化1 只有偶数才会是质数 优化2 回文数的判断次数要优于检查素数 先判断是否为回文数再检查是否为质数 if( hw(i)&&isprime(i)) 这里…

前端根据URL地址实现下载(txt,图片,word,xlsx,ppt)

前端根据URL地址实现下载(txt,图片,word,xlsx,ppt) 一、对于txt,图片类的二、对于word,xlsx,ppt类的1.a标签可以实现下载2. window.open() 一、对于txt,图片类…

Dijkstra算法——邻接矩阵实现+路径记录

本文是在下面这篇文章的基础上做了一些补充,增加了路径记录的功能。具体Dijkstra的实现过程可以参考下面的这篇文章。 [jarvan:Dijkstra算法详解 通俗易懂](Dijkstra算法详解 通俗易懂 - jarvan的文章 - 知乎 https://zhuanlan.zhihu.com/p/338414118) …

一方水土,一方气运

峰民风水悟语:“地灵人杰”,一方好水土,养育一方好人才。风水,就是一个地方的山水之气,会影响一个地方的人。正所谓:“山清水秀出美人,穷山恶水出刁民”就是这个理。 古人认为环境的能量磁场能控…

oracle19c容器数据库rman备份特性-----性能优化(三)

目录 冗余备份片 1.备份的时候指定 2.rman配置中设定 归档备份(将备份集保留) 二级备份(将备份文件保留) 1.备份闪回恢复区的恢复文件 2.备份所有恢复文件 recovery catalog database 1.創建recovery catalog 2.创建VPC…

cocos creator 如何绑定参数到编辑器

很多cocos creator同学不知道如何绑定组件属性到编辑器上,今天我们来教大家如何绑定 1: 基本数据属性绑定到编辑器 这个非常简单,模板是属性名字: 默认的值; Is_debug: false, speed: 100, 2: 系统组件类型与节点绑定到编辑器 属性名字: { type: 组件…

少儿编程 中国电子学会图形化编程2022年9月等级考试Scratch二级真题解析(选择题、判断题)

一、单选题(共25题,每题2分,共50分) 一、单选题(共25题,共50分) 1.数列:1,2,3,4,6,9,13,19,28,...的下一项是多少&#…

竞赛保研 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计…

第二百五十四回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何给图片添加阴影"相关的内容,本章回中将介绍自定义Radio组件.闲话休提,让我们一起Talk Flutter吧…

Spark 初级编程实践

什么是Spark? Spark是一个快速、通用、可扩展的大数据处理引擎,最初由加州大学伯克利分校的AMPLab开发。它提供了高级API,用于在大规模数据集上执行并行处理。Spark支持多种编程语言,包括Java、Scala、Python和R,因此被广泛应用于大数据分析和机器学习等领域。 一、目的 …

认识Linux指令之 “ 重定向” 符号

01.echo命令 在Linux中,我们可以使用echo命令打印 02. > 输出重定向 在111文件夹中我们只有dir文件夹和file.txt文件 用 echo > (输出重定向)我们可以将内容输入对应的文件中 也可以直接重定向 > >的作用 创建文件&#xff08…

【MATLAB】小波_LSTM神经网络时序预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 小波-LSTM神经网络时序预测算法是一种结合了小波变换和长短期记忆神经网络(LSTM)的时间序列预测方法。 小波变换是一种信号处理方法,能够将信号分解为…

.NET国产化改造探索(五)、结合Nginx并确保.NET应用程序自动启动

随着时代的发展以及近年来信创工作和…废话就不多说了,这个系列就是为.NET遇到国产化需求的一个闭坑系列。接下来,看操作。 上一篇介绍了如何在银河麒麟操作系统上安装Nginx,这篇文章详细介绍下在银河麒麟操作系统上,使用Nginx.N…

vue3 封装一个Tooltip 文字提示组件

效果图 默认展示icon图标&#xff0c;悬浮展示文字 如果slot有内容则展示对应内容 实现 用的是El-Tooltip组件 Element - The worlds most popular Vue UI framework 组件代码 <script setup lang"ts"> import { Icon } from /components/Icon import { ElTo…

《剑指offer》专项突破

第一章:整数 面试题1:整数除法 题目 输入两个int型整数,求它们除法的商,要求不得使用乘号’*‘、除号’/‘以及求余符号’%。当发生溢出时返回最大的整数值。假设除数不为0。例如,输入15和2,输出15/2的结果,即7。 参考代码 public int divide(int dividend, int di…

数字孪生与数据可视化大屏

什么是数字孪生 数字孪生技术是一种在现实世界中模拟虚拟世界的技术,它可以将物理世界中的各种事物、过程、行为等转化为虚拟世界中的数据模型,从而实现虚拟世界与现实世界的互动。数字孪生技术可以应用于能源管理、建筑能耗评估、设备全生命周期管理等领域,它可以帮助企业…

计算机体系结构流水线学习记录

一、知识点汇总 1.理想情况下&#xff0c;流水线能够实现 n 倍的吞吐率加速比&#xff08;n为流水线深度&#xff09;&#xff0c;但是流水线深度并非越大越好&#xff0c;因为流水线的深度会影响到性能和功耗之间的平衡。 2.RISC&#xff1a;Reduced Instruction Set Comput…

WPF真入门教程26--项目案例--欧姆龙PLC通讯工具

1、案例介绍 前面已经完成了25篇的文章介绍&#xff0c;概括起来就是从0开始&#xff0c;一步步熟悉了wpf的概念&#xff0c;UI布局控件&#xff0c;资源样式文件的使用&#xff0c;MVVM模式介绍&#xff0c;命令Command等内容&#xff0c;这节来完成一个实际的项目开发&#…

第57、58颗北斗导航卫星发射成功

第57、58颗北斗导航卫星发射成功&#xff01; 12月26日11时26分&#xff0c;我国在西昌卫星发射中心用长征三号乙运载火箭与远征一号上面级&#xff0c;成功发射第57、58颗北斗导航卫星。 这组卫星属中圆地球轨道卫星&#xff08;MEO卫星&#xff09;&#xff0c;是我国北斗三…