文章目录
前言
线程是一个操作系统能够运算调度的最小单位,被包含在进程之中,也是进程中的实际运作单位。而在一个应用中也许会有很多个进程,但是所有的 UIAbility、ServiceExtensionAbility 和 DataShareExtensionAbility 最终还是会运行在同一个主进程中,而同一类型的ExtensionAbility(除ServiceExtensionAbility和DataShareExtensionAbility外)均是运行在一个独立进程中。在鸿蒙开发中,每个进程都有一个主线程。
一、线程通信
在HarmonyOS应用架构中为了保证应用的流畅性和响应性,非UI相关的耗时操作通常不会在主线程上执行,而是需要创建额外的工作线程或任务来完成。线程通信呢,开发中常用的有Emitter、Worker,本文主要介绍 HarmonyOS 中的 Emitter 线程通信。
二、Emitter 通信
1. 介绍
Emitter主要提供线程间发送和处理事件的能力,包括对持续订阅事件或单次订阅事件的处理、取消订阅事件、发送事件到事件队列等。
2. 使用方法
- 发送事件 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);
- 订阅事件 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
代码如下
-
使用的时候可以将emitter中的事件ID封装成一个类 方便调用。
-
发送事件
页面A
代码如下:
- 接收
总结
以上就是今天要讲的内容,本文仅仅简单介绍了 emitter 的使用及使用场景。
标签:通信,Emitter,线程,事件,emitter,页面 From: https://blog.csdn.net/hhhhhh5666/article/details/141997816