HarmonyOS鸿蒙Next中实现不同线程间通信功能示例代码
HarmonyOS鸿蒙Next中实现不同线程间通信功能示例代码
介绍
本示例使用’@ohos.events.emitter’模块,实现了在同一进程不同线程间通信的能力,包括单次订阅事件、取消订阅事件,以及发送信息能力。
效果预览
使用说明
- 启动应用后输入框内输入要发送的信息;
- 点击’Send Message to B’按钮发送,下方会更新输入框内容;
- 点击’Unsub’按钮取消订阅,再次发送信息接收不到。
实现思路
emitterSub(eventId: number, eventCallback: Callback<emitter.EventData>)
这个函数用于订阅一个特定的事件。当该事件被触发时,会调用传入的回调函数。emitterSend(eventId: number, eventParam: string)
这个函数用于发送一个特定的事件,并附带一些数据。emitterShut(eventId: number)
这个函数用于取消对某个事件的订阅。
export function emitterSub(eventId: number, eventCallback: Callback<emitter.EventData>) {
let event: emitter.InnerEvent = {
eventId: eventId
}
emitter.on(event, eventCallback)
}
export function emitterSend(eventId: number, eventParam: string) {
let event: emitter.InnerEvent = {
eventId: eventId
}
let eventData: emitter.EventData = {
data: {
param: eventParam
}
};
emitter.emit(event, eventData)
}
export function emitterShut(eventId: number) {
emitter.off(eventId)
}
更多关于HarmonyOS鸿蒙Next中实现不同线程间通信功能示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
在HarmonyOS Next中实现线程间通信可以使用EventHub或Emitter。以下是EventHub示例代码:
// 主线程发布事件
import common from '@ohos.app.ability.common';
let eventHub = new common.EventHub();
eventHub.emit("myEvent", {data: "test"});
// 子线程订阅事件
import worker from '@ohos.worker';
import common from '@ohos.app.ability.common';
let workerPort = worker.workerPort;
let eventHub = new common.EventHub(workerPort);
eventHub.on("myEvent", (data) => {
console.log("Received:" + data);
});
使用Emitter的异步通信示例:
import emitter from '@ohos.events.emitter';
// 发送事件
let event = {
eventId: 1,
data: {"key":"value"}
};
emitter.emit(event);
// 接收事件
emitter.on(event => {
console.log("Event received:" + JSON.stringify(event));
});
更多关于HarmonyOS鸿蒙Next中实现不同线程间通信功能示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个很好的HarmonyOS Next线程间通信实现示例。我来分析下这个代码的关键点:
-
核心使用了@ohos.events.emitter模块提供的发布-订阅模式,这是HarmonyOS推荐的线程通信方式之一。
-
代码封装了三个关键函数:
- emitterSub()用于订阅事件,通过emitter.on()注册回调
- emitterSend()用于发送事件,通过emitter.emit()触发事件
- emitterShut()用于取消订阅,通过emitter.off()移除监听
-
事件数据通过EventData结构体传递,支持复杂数据类型。
-
示例中通过eventId来区分不同事件,这是典型的发布订阅模式实现。
这种实现方式相比直接使用线程同步原语(如锁)更安全高效,适合HarmonyOS的分布式场景。需要注意事件ID的管理和内存泄漏问题(及时取消订阅)。