harmony 鸿蒙使用Worker进行线程间通信
使用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 = (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 = (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 = (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线程间支持的数据类型参考序列化支持类型。
你可能感兴趣的鸿蒙文章
harmony 鸿蒙FA模型访问Stage模型DataShareExtensionAbility
0
赞
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦