itc-with-worker.md 2.5 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
# 使用Worker进行线程间通信


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


Worker的开发步骤如下:


1. 在工程的[模块级build-profile.json5](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-building-configuration-0000001218440654#section6887184182020)文件的buildOption属性中添加配置信息。

   ```ts
     "buildOption": {
       "sourceOption": {
         "workers": [
           "./src/main/ets/workers/worker.ts"
         ]
       }
     }
   ```

22
2. 根据build-profile.json5中的配置创建对应的worker.ts文件。
Z
zengyawen 已提交
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

   ```ts
   import worker from '@ohos.worker';

   let parent = worker.workerPort;

   // 处理来自主线程的消息
   parent.onmessage = function(message) {
       console.info("onmessage: " + message)
       // 发送消息到主线程
       parent.postMessage("message from worker thread.")
   }
   ```

3. 主线程中使用如下方式初始化和使用worker。
   - Stage模型:

      ```ts
      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模型:

      ```ts
      import worker from '@ohos.worker';

62
      let wk = new worker.ThreadWorker("../workers/worker.ts");
Z
zengyawen 已提交
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

      // 发送消息到worker线程
      wk.postMessage("message from main thread.")

      // 处理来自worker线程的消息
      wk.onmessage = function(message) {
          console.info("message from worker: " + message)

          // 根据业务按需停止worker线程
          wk.terminate()
      }
      ```

**说明:**

78
- build-profile.json5中配置的worker.ts的相对路径都为`./src/main/ets/workers/worker.ts`时,在Stage模型下创建worker需要传入路径`entry/ets/workers/worker.ts`;在FA模型下创建worker需要传入路径`../workers/worker.ts`
Z
zengyawen 已提交
79

80
- 主线程与Worker线程间支持的数据类型参考[序列化支持类型](../reference/apis/js-apis-worker.md#序列化支持类型)