首页 > 其他分享 >Emitter 线程通信

Emitter 线程通信

时间:2024-09-08 13:25:32浏览次数:10  
标签:通信 Emitter 线程 事件 emitter 页面

文章目录


前言

线程是一个操作系统能够运算调度的最小单位,被包含在进程之中,也是进程中的实际运作单位。而在一个应用中也许会有很多个进程,但是所有的 UIAbility、ServiceExtensionAbility 和 DataShareExtensionAbility 最终还是会运行在同一个主进程中,而同一类型的ExtensionAbility(除ServiceExtensionAbility和DataShareExtensionAbility外)均是运行在一个独立进程中。在鸿蒙开发中,每个进程都有一个主线程。


一、线程通信

在HarmonyOS应用架构中为了保证应用的流畅性和响应性,非UI相关的耗时操作通常不会在主线程上执行,而是需要创建额外的工作线程或任务来完成。线程通信呢,开发中常用的有Emitter、Worker,本文主要介绍 HarmonyOS 中的 Emitter 线程通信。

二、Emitter 通信

1. 介绍

Emitter主要提供线程间发送和处理事件的能力,包括对持续订阅事件或单次订阅事件的处理、取消订阅事件、发送事件到事件队列等。

2. 使用方法

  1. 发送事件 emitter.emit(innerEvent, eventData)
let eventData: emitter.EventData = {
    data: {
        "content": "c",
        "id": 1,
    }
};

let innerEvent: emitter.InnerEvent = {
    eventId: 1,
    priority: emitter.EventPriority.HIGH
};

emitter.emit(innerEvent, eventData);


  1. 订阅事件 emitter.on(innerEvent, () => {
    console.info(‘callback’);
    });
// 收到eventId为"eventId"的事件后执行回调函数
emitter.on("eventId", () => {
  console.info('callback');
});

3. 使用场景

日常开发中,需要用到 Emitter 的场景 比如: 有两个毫不相关的页面,页面A页面B,需要进行通信时,在 页面B 添加了一条数据,添加完之后点击保存时需要返回到 页面A,并在 页面A 更新列表,显示刚刚添加的那条数据,这时候就需要使用 emitter 进行通信。即在页面B在返回页面时用 emitter.emit 发送事件,在 页面A 用 emitter.on 接收。

页面B
页面B
代码如下

  1. 使用的时候可以将emitter中的事件ID封装成一个类 方便调用。
    在这里插入图片描述

  2. 发送事件
    在这里插入图片描述

页面A
在这里插入图片描述
代码如下:

  1. 接收
    在这里插入图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了 emitter 的使用及使用场景。

标签:通信,Emitter,线程,事件,emitter,页面
From: https://blog.csdn.net/hhhhhh5666/article/details/141997816

相关文章

  • 通信工程学习:什么是FDM频分复用、TDM时分复用、WDM波分复用、CDM码分复用
    FDM频分复用、TDM时分复用、WDM波分复用、CDM码分复用FDM频分复用、TDM时分复用、WDM波分复用、CDM码分复用是通信领域中常见的四种复用技术,它们各自具有不同的特点和应用场景。以下是对这四种复用技术的详细解释:一、FDM频分复用(Frequency-divisionMultiplexing)1、FDM频分......
  • 通信工程学习:什么是ASK振幅键控、FSK频移键控、PSK相移键控
    ASK振幅键控、FSK频移键控、PSK相移键控    ASK(振幅键控)、FSK(频移键控)和PSK(相移键控)是三种常见的数字调制技术,它们各自通过不同的方式改变载波的某个参数来传输数字信息。以下是对这三种调制技术的详细解释:一、ASK振幅键控1、ASK振幅键控的定义:    ASK(Amp......
  • C# 多线程的学习大纲
    C#多线程编程是开发高效并发应用的核心技术之一。以下是一个详细的学习大纲,涵盖了C#多线程编程的各个方面,从基础概念到高级主题。学习大纲1.多线程基础知识1.1什么是线程?定义线程及其在操作系统中的角色进程与线程的区别1.2C#中的多线程基础Thread类的基本使......
  • 阅读周·深入浅出的Node.js | 异步I/O、事件驱动和单线程,Node基调三元素了解一下
    背景去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。没有计划的阅读,收效甚微。新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。这个“玩法”虽然常见且板正,但是有效。已读完书籍:《架构简洁之道》。当前阅读......
  • 多线程篇(阻塞队列- BlockingQueue)(持续更新迭代)
    目录一、了解什么是阻塞队列之前,需要先知道队列1.Queue(接口)二、阻塞队列1.前言2.什么是阻塞队列3.Java里面常见的阻塞队列三、BlockingQueue(接口)1.前言2.简介3.特性3.1.队列类型3.2.队列数据结构2.简介4.核心功能入队(放入数据)出队(取出数据)总结四......
  • docker php和nginx的通信
    1安装网络dockernetworkcreatephpClassExamples_network2安装nginx2.1生成临时容器dockerrun-it--nametest_nginx-dnginx查看临时容器内部,找到关键目录1、工作目录:lsusr/share/nginx/html 2、配置目录lsetc/nginx/conf.d3、日志目录lsvar......
  • PLC(电力载波通信)网络机制介绍
    1.概述1.1什么是PLC电力载波通讯即PLC,是英文PowerlineCarrier的简称。电力载波是电力系统特有的通信方式,电力载波通讯是指利用现有电力线,通过载波方式将模拟或数字信号进行高速传输的技术。最大特点是不需要重新架设网络,只要有电线,就能进行数据传递。 名词解释:相位:C......
  • 电子电气架构---私有总线通信和诊断规则
    电子电气架构—私有总线通信和诊断规则我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益......
  • [Redis]Redis到底是单线程还是多线程程序?
    概述这里我们先给出问题的全面回答:Redis到底是多线程还是单线程程序要看是针对哪个功能而言,对于核心业务功能部分(命令操作处理数据),Redis是单线程的,主要是指Redis的网络IO和键值对读写是由一个线程来完成的,这也是Redis对外提供键值存储服务的主要流程,所以一般我们认为Red......
  • Mininet MAC地址学习:通过Mininet模拟二层交换机和两个主机,通过两个主机通信来了解交换
    一.MAC地址学习1.登录我们创建mininet的虚拟机,创建一个线型拓扑,控制器设置为无。2.查看全部节点,查看链路信息,然后查看节点信息3.再打开一个终端(Terminal窗口2),然后打开交换机s1和交换机s2的二层(因为交换机s1和交换机s2是两个SDN交换机,在启动Mininet时没有指定任何控制器,交......