harmony 鸿蒙使用Worker进行线程间通信

  • 2022-12-13
  • 浏览 (1389)

使用Worker进行线程间通信

Worker是与主线程并行的独立线程。创建Worker的线程被称为宿主线程,Worker工作的线程被称为Worker线程。创建Worker时传入的脚本文件在Worker线程中执行,通常在Worker线程中处理耗时的操作,需要注意的是,Worker中不能直接更新Page。

Worker的开发步骤如下:

  1. 在工程的模块级build-profile.json5文件的buildOption属性中添加配置信息。
   "buildOption": {
     "sourceOption": {
       "workers": [
         "./src/main/ets/workers/worker.ts"
       ]
     }
   }
  1. 根据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.")
   }
  1. 主线程中使用如下方式初始化和使用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 鸿蒙应用模型

harmony 鸿蒙使用显式Want启动应用组件

harmony 鸿蒙使用隐式Want打开网址

harmony 鸿蒙AbilityStage组件容器

harmony 鸿蒙访问DataAbility

harmony 鸿蒙FA模型访问Stage模型DataShareExtensionAbility

harmony 鸿蒙AccessibilityExtensionAbility

harmony 鸿蒙常见action与entities

harmony 鸿蒙API切换概述

harmony 鸿蒙app和deviceConfig的切换

0  赞