HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第53天,使用Worker进行线程间通信
HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第53天,使用Worker进行线程间通信 1、使用Emitter进行线程间通信
Emitter主要提供线程间发送和处理事件的能力,包括对持续订阅事件或单次订阅事件的处理、取消订阅事件、发送事件到事件队列等。
Emitter的开发步骤如下:
- 订阅事件
import emitter from "@ohos.events.emitter";
// 定义一个eventId为1的事件
let event = {
eventId: 1
};
// 收到eventId为1的事件后执行该回调
let callback = (eventData) => {
console.info('event callback');
};
// 订阅eventId为1的事件
emitter.on(event, callback);
- 发送事件
import emitter from "@ohos.events.emitter";
// 定义一个eventId为1的事件,事件优先级为Low
let event = {
eventId: 1,
priority: emitter.EventPriority.LOW
};
let eventData = {
data: {
"content": "c",
"id": 1,
"isEmpty": false,
}
};
// 发送eventId为1的事件,事件内容为eventData
emitter.emit(event, eventData);
2、使用Worker进行线程间通信
Worker是与主线程并行的独立线程。创建Worker的线程被称为宿主线程,Worker工作的线程被称为Worker线程。创建Worker时传入的脚本文件在Worker线程中执行,通常在Worker线程中处理耗时的操作,需要注意的是,Worker中不能直接更新Page。
Worker的开发步骤如下:
- 在工程的模块级build-profile.json5文件的buildOption属性中添加配置信息。
"buildOption": {
"sourceOption": {
"workers": [
"./src/main/ets/workers/worker.ts"
]
}
}
- 根据build-profile.json5中的配置创建对应的worker.ts文件。
import worker from '@ohos.worker';
let parent = worker.workerPort;
// 处理来自主线程的消息
parent.onmessage = function(message) {
console.info("onmessage: " + message)
// 发送消息到主线程
parent.postMessage("message from worker thread.")
}
- 主线程中使用如下方式初始化和使用worker
Stage模型:
import worker from '@ohos.worker';
let wk = new worker.ThreadWorker("entry/ets/workers/worker.ts");
// 发送消息到worker线程
wk.postMessage("message from main thread.")
// 处理来自worker线程的消息
wk.onmessage = function(message) {
console.info("message from worker: " + message)
// 根据业务按需停止worker线程
wk.terminate()
}
FA模型:
import worker from '@ohos.worker';
let wk = new worker.ThreadWorker("../workers/worker.ts");
// 发送消息到worker线程
wk.postMessage("message from main thread.")
// 处理来自worker线程的消息
wk.onmessage = function(message) {
console.info("message from worker: " + message)
// 根据业务按需停止worker线程
wk.terminate()
}
说明:
- build-profile.json5中配置的worker.ts的相对路径都为./src/main/ets/workers/worker.ts时,在Stage模型下创建worker需要传入路径entry/ets/workers/worker.ts;
- 在FA模型下创建worker需要传入路径…/workers/worker.ts。
- 主线程与Worker线程间支持的数据类型参考序列化支持类型。
更多关于HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第53天,使用Worker进行线程间通信的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
话说这种可以复制编码的板块是如何添加的呢?
更多关于HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第53天,使用Worker进行线程间通信的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS中,ArkTS语言支持使用Worker进行线程间通信。Worker是一种多线程机制,允许在后台执行耗时操作,避免阻塞主线程。通过Worker,开发者可以在主线程和Worker线程之间传递消息,实现异步通信。
要使用Worker,首先需要创建一个Worker文件,例如worker.ts
。在该文件中,定义Worker线程的逻辑。Worker线程通过onmessage
事件监听主线程发送的消息,并通过postMessage
方法向主线程发送消息。
在主线程中,通过new Worker()
创建Worker实例,并指定Worker文件的路径。主线程可以通过postMessage
方法向Worker线程发送消息,并通过onmessage
事件监听Worker线程的响应。
以下是一个简单的示例:
worker.ts:
onmessage = function(e) {
const data = e.data;
// 处理数据
const result = data * 2;
postMessage(result);
};
main.ts:
const worker = new Worker('worker.ts');
worker.onmessage = function(e) {
console.log('Received from worker:', e.data);
};
worker.postMessage(10); // 发送数据到Worker线程
在这个示例中,主线程向Worker线程发送数字10
,Worker线程接收到数据后将其乘以2
,并将结果20
发送回主线程。主线程通过onmessage
事件接收到结果并打印。
通过Worker,开发者可以在HarmonyOS中实现高效的线程间通信,提升应用的性能和响应速度。
在第53天的HarmonyOS鸿蒙Next ArkTS语言教程中,您将学习如何使用Worker进行线程间通信。Worker是一种后台线程,允许您在不阻塞主线程的情况下执行耗时操作。通过postMessage
方法,主线程可以向Worker发送消息,而Worker通过onmessage
事件监听器接收并处理这些消息。同样,Worker也可以通过postMessage
向主线程发送处理结果。这种机制有效提升了应用的响应速度和性能。