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 的使用及使用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值