1e41f4b71Sopenharmony_ci# @ohos.worker (启动一个Worker) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciWorker是与主线程并行的独立线程。创建Worker的线程称之为宿主线程,Worker自身的线程称之为Worker线程。创建Worker传入的url文件在Worker线程中执行,可以处理耗时操作但不可以直接操作UI。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ciWorker主要作用是为应用程序提供一个多线程的运行环境,可满足应用程序在执行过程中与主线程分离,在后台线程中运行一个脚本操作耗时操作,极大避免类似于计算密集型或高延迟的任务阻塞主线程的运行。由于Worker一旦被创建则不会主动被销毁,若不处于任务状态一直运行,在一定程度上会造成资源的浪费,应及时关闭空闲的Worker。 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ciWorker的上下文对象和主线程的上下文对象是不同的,Worker线程不支持UI操作。 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ciWorker使用过程中的相关注意点请查[Worker注意事项](../../arkts-utils/worker-introduction.md#worker注意事项) 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci> **说明:**<br/> 12e41f4b71Sopenharmony_ci> 本模块首批接口从API version 7 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 13e41f4b71Sopenharmony_ci 14e41f4b71Sopenharmony_ci## 导入模块 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci```ts 17e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 18e41f4b71Sopenharmony_ci``` 19e41f4b71Sopenharmony_ci 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ci## 属性 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 26e41f4b71Sopenharmony_ci| --------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ | 27e41f4b71Sopenharmony_ci| workerPort<sup>9+</sup> | [ThreadWorkerGlobalScope](#threadworkerglobalscope9) | 是 | 是 | worker线程用于与宿主线程通信的对象。**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 | 28e41f4b71Sopenharmony_ci| parentPort<sup>(deprecated)</sup> | [DedicatedWorkerGlobalScope](#dedicatedworkerglobalscopedeprecated) | 是 | 是 | worker线程用于与宿主线程通信的对象。<br/>此属性从API version 7开始支持,从API version 9 开始被废弃。<br/>建议使用workerPort<sup>9+</sup>替代。 | 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_ci## WorkerOptions 32e41f4b71Sopenharmony_ci 33e41f4b71Sopenharmony_ciWorker构造函数的选项信息,用于为Worker添加其他信息。 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 36e41f4b71Sopenharmony_ci 37e41f4b71Sopenharmony_ci| 名称 | 类型 | 只读 | 可选 | 说明 | 38e41f4b71Sopenharmony_ci| ---- | -------- | ---- | ---- | -------------- | 39e41f4b71Sopenharmony_ci| type | 'classic' \| 'module' | 是 | 是 | Worker执行脚本的模式类型,暂不支持module类型,默认值为"classic"。<br/>**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 | 40e41f4b71Sopenharmony_ci| name | string | 是 | 是 | Worker的名称,默认值为 undefined 。<br/>**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。| 41e41f4b71Sopenharmony_ci| shared | boolean | 是 | 是 | 表示Worker共享功能,此接口暂不支持。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci## ThreadWorker<sup>9+</sup> 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ci使用以下方法前,均需先构造ThreadWorker实例,ThreadWorker类继承[WorkerEventTarget](#workereventtarget9)。 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci### constructor<sup>9+</sup> 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ciconstructor(scriptURL: string, options?: WorkerOptions) 50e41f4b71Sopenharmony_ci 51e41f4b71Sopenharmony_ciThreadWorker构造函数。 52e41f4b71Sopenharmony_ci 53e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 54e41f4b71Sopenharmony_ci 55e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 56e41f4b71Sopenharmony_ci 57e41f4b71Sopenharmony_ci**参数:** 58e41f4b71Sopenharmony_ci 59e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 60e41f4b71Sopenharmony_ci| --------- | ------------------------------- | ---- | ------------------------------------------------------------ | 61e41f4b71Sopenharmony_ci| scriptURL | string | 是 | Worker线程文件的路径。<br/>路径规则详细参考[文件路径注意事项](../../arkts-utils/worker-introduction.md#文件路径注意事项)。 | 62e41f4b71Sopenharmony_ci| options | [WorkerOptions](#workeroptions) | 否 | Worker构造的选项。 | 63e41f4b71Sopenharmony_ci 64e41f4b71Sopenharmony_ci**错误码:** 65e41f4b71Sopenharmony_ci 66e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 67e41f4b71Sopenharmony_ci 68e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 69e41f4b71Sopenharmony_ci| -------- | -------- | 70e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 71e41f4b71Sopenharmony_ci| 10200003 | Worker initialization failed. | 72e41f4b71Sopenharmony_ci| 10200007 | The worker file path is invalid. | 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ci**示例:** 75e41f4b71Sopenharmony_ci 76e41f4b71Sopenharmony_ci此处以在Stage模型中Ability加载Worker文件为例,使用Library加载Worker线程文件的场景参考[文件路径注意事项](../../arkts-utils/worker-introduction.md#文件路径注意事项)。 77e41f4b71Sopenharmony_ci 78e41f4b71Sopenharmony_ci```ts 79e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ci// 主要说明以下两种场景: 82e41f4b71Sopenharmony_ci 83e41f4b71Sopenharmony_ci// 场景1: worker文件所在路径:"entry/src/main/ets/workers/worker.ets" 84e41f4b71Sopenharmony_ciconst workerStageModel01 = new worker.ThreadWorker('entry/ets/workers/worker.ets', {name:"first worker in Stage model"}); 85e41f4b71Sopenharmony_ci 86e41f4b71Sopenharmony_ci// 场景2: worker文件所在路径:"phone/src/main/ets/ThreadFile/workers/worker.ets" 87e41f4b71Sopenharmony_ciconst workerStageModel02 = new worker.ThreadWorker('phone/ets/ThreadFile/workers/worker.ets'); 88e41f4b71Sopenharmony_ci``` 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_ci 91e41f4b71Sopenharmony_ci### postMessage<sup>9+</sup> 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_cipostMessage(message: Object, transfer: ArrayBuffer[]): void 94e41f4b71Sopenharmony_ci 95e41f4b71Sopenharmony_ci宿主线程通过转移对象所有权的方式向Worker线程发送消息。 96e41f4b71Sopenharmony_ci 97e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 98e41f4b71Sopenharmony_ci 99e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 100e41f4b71Sopenharmony_ci 101e41f4b71Sopenharmony_ci**参数:** 102e41f4b71Sopenharmony_ci 103e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 104e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ | 105e41f4b71Sopenharmony_ci| message | Object | 是 | 发送至Worker的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 | 106e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 是 | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到Worker线程,在宿主线程中将会变为不可用,仅在Worker线程中可用,数组不可传入null。 | 107e41f4b71Sopenharmony_ci 108e41f4b71Sopenharmony_ci**错误码:** 109e41f4b71Sopenharmony_ci 110e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 111e41f4b71Sopenharmony_ci 112e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 113e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | 114e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 115e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 116e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 117e41f4b71Sopenharmony_ci 118e41f4b71Sopenharmony_ci**示例:** 119e41f4b71Sopenharmony_ci 120e41f4b71Sopenharmony_ci```ts 121e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 122e41f4b71Sopenharmony_ci 123e41f4b71Sopenharmony_cilet buffer = new ArrayBuffer(8); 124e41f4b71Sopenharmony_ciworkerInstance.postMessage(buffer, [buffer]); 125e41f4b71Sopenharmony_ci``` 126e41f4b71Sopenharmony_ci 127e41f4b71Sopenharmony_ci### postMessage<sup>9+</sup> 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_cipostMessage(message: Object, options?: PostMessageOptions): void 130e41f4b71Sopenharmony_ci 131e41f4b71Sopenharmony_ci宿主线程通过转移对象所有权或者拷贝数据的方式向Worker线程发送消息。 132e41f4b71Sopenharmony_ci 133e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 134e41f4b71Sopenharmony_ci 135e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 136e41f4b71Sopenharmony_ci 137e41f4b71Sopenharmony_ci**参数:** 138e41f4b71Sopenharmony_ci 139e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 140e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 141e41f4b71Sopenharmony_ci| message | Object | 是 | 发送至Worker的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 | 142e41f4b71Sopenharmony_ci| options | [PostMessageOptions](#postmessageoptions) | 否 | 当填入该参数时,与传入ArrayBuffer[]的作用一致,该数组中对象的所有权会被转移到Worker线程,在宿主线程中将会变为不可用,仅在Worker线程中可用。<br>若不填入该参数,默认设置为 undefined,通过拷贝数据的方式传输信息到Worker线程。 | 143e41f4b71Sopenharmony_ci 144e41f4b71Sopenharmony_ci**错误码:** 145e41f4b71Sopenharmony_ci 146e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 147e41f4b71Sopenharmony_ci 148e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 149e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | 150e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 151e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 152e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 153e41f4b71Sopenharmony_ci 154e41f4b71Sopenharmony_ci**示例:** 155e41f4b71Sopenharmony_ci 156e41f4b71Sopenharmony_ci```ts 157e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 158e41f4b71Sopenharmony_ci 159e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world"); 160e41f4b71Sopenharmony_ci 161e41f4b71Sopenharmony_cilet buffer = new ArrayBuffer(8); 162e41f4b71Sopenharmony_ciworkerInstance.postMessage(buffer, [buffer]); 163e41f4b71Sopenharmony_ci``` 164e41f4b71Sopenharmony_ci 165e41f4b71Sopenharmony_ci 166e41f4b71Sopenharmony_ci### postMessageWithSharedSendable<sup>12+</sup> 167e41f4b71Sopenharmony_ci 168e41f4b71Sopenharmony_cipostMessageWithSharedSendable(message: Object, transfer?: ArrayBuffer[]): void 169e41f4b71Sopenharmony_ci 170e41f4b71Sopenharmony_ci宿主线程向Worker线程发送消息,消息中的Sendable对象通过引用传递,消息中的非Sendable对象通过序列化传递。 171e41f4b71Sopenharmony_ci 172e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 173e41f4b71Sopenharmony_ci 174e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 175e41f4b71Sopenharmony_ci 176e41f4b71Sopenharmony_ci**参数:** 177e41f4b71Sopenharmony_ci 178e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 179e41f4b71Sopenharmony_ci| --------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 180e41f4b71Sopenharmony_ci| message | Object | 是 | 发送至Worker的数据,该数据对象必须是可序列化或可共享,序列化支持类型见[序列化类型说明](#序列化支持类型),共享支持类型见[Sendable支持的数据类型](../../arkts-utils/sendable-overview.md#sendable支持的数据类型)。 | 181e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 否 | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到Worker线程,在宿主线程中将会变为不可用,仅在Worker线程中可用,数组不可传入null。默认值为空数组。 | 182e41f4b71Sopenharmony_ci 183e41f4b71Sopenharmony_ci**错误码:** 184e41f4b71Sopenharmony_ci 185e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 186e41f4b71Sopenharmony_ci 187e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 188e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | 189e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 190e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 191e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 192e41f4b71Sopenharmony_ci 193e41f4b71Sopenharmony_ci**示例:** 194e41f4b71Sopenharmony_ci 195e41f4b71Sopenharmony_ci<!--code_no_check--> 196e41f4b71Sopenharmony_ci```ts 197e41f4b71Sopenharmony_ci// index.ets 198e41f4b71Sopenharmony_ci// 新建SendableObject实例并通过宿主线程传递至worker线程 199e41f4b71Sopenharmony_ci 200e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 201e41f4b71Sopenharmony_ciimport { SendableObject } from './sendable' 202e41f4b71Sopenharmony_ci 203e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/Worker.ets"); 204e41f4b71Sopenharmony_cilet object: SendableObject = new SendableObject(); 205e41f4b71Sopenharmony_ciworkerInstance.postMessageWithSharedSendable(object); 206e41f4b71Sopenharmony_ci``` 207e41f4b71Sopenharmony_ci 208e41f4b71Sopenharmony_ci```ts 209e41f4b71Sopenharmony_ci// sendable.ets 210e41f4b71Sopenharmony_ci// 定义SendableObject 211e41f4b71Sopenharmony_ci 212e41f4b71Sopenharmony_ci@Sendable 213e41f4b71Sopenharmony_ciexport class SendableObject { 214e41f4b71Sopenharmony_ci a:number = 45; 215e41f4b71Sopenharmony_ci} 216e41f4b71Sopenharmony_ci``` 217e41f4b71Sopenharmony_ci 218e41f4b71Sopenharmony_ci<!--code_no_check--> 219e41f4b71Sopenharmony_ci```ts 220e41f4b71Sopenharmony_ci// worker文件路径为:entry/src/main/ets/workers/Worker.ets 221e41f4b71Sopenharmony_ci// Worker.ets 222e41f4b71Sopenharmony_ci// 接收宿主线程传递至worker线程的数据并访问 223e41f4b71Sopenharmony_ci 224e41f4b71Sopenharmony_ciimport { SendableObject } from '../pages/sendable' 225e41f4b71Sopenharmony_ciimport { worker, ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@kit.ArkTS'; 226e41f4b71Sopenharmony_ci 227e41f4b71Sopenharmony_ciconst workerPort: ThreadWorkerGlobalScope = worker.workerPort; 228e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents) => { 229e41f4b71Sopenharmony_ci let obj: SendableObject = e.data; 230e41f4b71Sopenharmony_ci console.info("sendable obj is: " + obj.a); 231e41f4b71Sopenharmony_ci} 232e41f4b71Sopenharmony_ci``` 233e41f4b71Sopenharmony_ci 234e41f4b71Sopenharmony_ci 235e41f4b71Sopenharmony_ci### on<sup>9+</sup> 236e41f4b71Sopenharmony_ci 237e41f4b71Sopenharmony_cion(type: string, listener: WorkerEventListener): void 238e41f4b71Sopenharmony_ci 239e41f4b71Sopenharmony_ci向Worker添加一个事件监听,该接口与[addEventListener<sup>9+</sup>](#addeventlistener9)接口功能一致。 240e41f4b71Sopenharmony_ci 241e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 242e41f4b71Sopenharmony_ci 243e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 244e41f4b71Sopenharmony_ci 245e41f4b71Sopenharmony_ci**参数:** 246e41f4b71Sopenharmony_ci 247e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 248e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------------- | 249e41f4b71Sopenharmony_ci| type | string | 是 | 监听的事件类型。 | 250e41f4b71Sopenharmony_ci| listener | [WorkerEventListener](#workereventlistener9) | 是 | 回调的事件。 | 251e41f4b71Sopenharmony_ci 252e41f4b71Sopenharmony_ci**错误码:** 253e41f4b71Sopenharmony_ci 254e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 255e41f4b71Sopenharmony_ci 256e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 257e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 258e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 259e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 260e41f4b71Sopenharmony_ci| 10200005 | The invoked API is not supported in workers. | 261e41f4b71Sopenharmony_ci 262e41f4b71Sopenharmony_ci**示例:** 263e41f4b71Sopenharmony_ci 264e41f4b71Sopenharmony_ci```ts 265e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 266e41f4b71Sopenharmony_ciworkerInstance.on("alert", (e)=>{ 267e41f4b71Sopenharmony_ci console.log("alert listener callback"); 268e41f4b71Sopenharmony_ci}) 269e41f4b71Sopenharmony_ci``` 270e41f4b71Sopenharmony_ci 271e41f4b71Sopenharmony_ci 272e41f4b71Sopenharmony_ci### once<sup>9+</sup> 273e41f4b71Sopenharmony_ci 274e41f4b71Sopenharmony_cionce(type: string, listener: WorkerEventListener): void 275e41f4b71Sopenharmony_ci 276e41f4b71Sopenharmony_ci向Worker添加一个事件监听,事件监听只执行一次便自动删除。 277e41f4b71Sopenharmony_ci 278e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 279e41f4b71Sopenharmony_ci 280e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 281e41f4b71Sopenharmony_ci 282e41f4b71Sopenharmony_ci**参数:** 283e41f4b71Sopenharmony_ci 284e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 285e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------------- | 286e41f4b71Sopenharmony_ci| type | string | 是 | 监听的事件类型。 | 287e41f4b71Sopenharmony_ci| listener | [WorkerEventListener](#workereventlistener9) | 是 | 回调的事件。 | 288e41f4b71Sopenharmony_ci 289e41f4b71Sopenharmony_ci**错误码:** 290e41f4b71Sopenharmony_ci 291e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 292e41f4b71Sopenharmony_ci 293e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 294e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 295e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 296e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 297e41f4b71Sopenharmony_ci| 10200005 | The invoked API is not supported in workers. | 298e41f4b71Sopenharmony_ci 299e41f4b71Sopenharmony_ci**示例:** 300e41f4b71Sopenharmony_ci 301e41f4b71Sopenharmony_ci```ts 302e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 303e41f4b71Sopenharmony_ciworkerInstance.once("alert", (e)=>{ 304e41f4b71Sopenharmony_ci console.log("alert listener callback"); 305e41f4b71Sopenharmony_ci}) 306e41f4b71Sopenharmony_ci``` 307e41f4b71Sopenharmony_ci 308e41f4b71Sopenharmony_ci 309e41f4b71Sopenharmony_ci### off<sup>9+</sup> 310e41f4b71Sopenharmony_ci 311e41f4b71Sopenharmony_cioff(type: string, listener?: WorkerEventListener): void 312e41f4b71Sopenharmony_ci 313e41f4b71Sopenharmony_ci删除类型为type的事件监听,该接口与[removeEventListener<sup>9+</sup>](#removeeventlistener9)接口功能一致。 314e41f4b71Sopenharmony_ci 315e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 316e41f4b71Sopenharmony_ci 317e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 318e41f4b71Sopenharmony_ci 319e41f4b71Sopenharmony_ci**参数:** 320e41f4b71Sopenharmony_ci 321e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 322e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------------------- | 323e41f4b71Sopenharmony_ci| type | string | 是 | 需要删除的事件类型。 | 324e41f4b71Sopenharmony_ci| listener | [WorkerEventListener](#workereventlistener9) | 否 | 删除监听事件后所执行的回调事件。 | 325e41f4b71Sopenharmony_ci 326e41f4b71Sopenharmony_ci**错误码:** 327e41f4b71Sopenharmony_ci 328e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 329e41f4b71Sopenharmony_ci 330e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 331e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 332e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 333e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 334e41f4b71Sopenharmony_ci| 10200005 | The invoked API is not supported in workers. | 335e41f4b71Sopenharmony_ci 336e41f4b71Sopenharmony_ci**示例:** 337e41f4b71Sopenharmony_ci 338e41f4b71Sopenharmony_ci```ts 339e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 340e41f4b71Sopenharmony_ci//使用on接口、once接口或addEventListener接口创建“alert”事件,使用off接口删除事件。 341e41f4b71Sopenharmony_ciworkerInstance.off("alert"); 342e41f4b71Sopenharmony_ci``` 343e41f4b71Sopenharmony_ci 344e41f4b71Sopenharmony_ci### registerGlobalCallObject<sup>11+</sup> 345e41f4b71Sopenharmony_ci 346e41f4b71Sopenharmony_ciregisterGlobalCallObject(instanceName: string, globalCallObject: Object): void 347e41f4b71Sopenharmony_ci 348e41f4b71Sopenharmony_ci在宿主线程的ThreadWorker实例上注册一个对象,该对象上的方法可以在Worker线程中被调用,详细介绍请参见[callGlobalCallObjectMethod](#callglobalcallobjectmethod11)。 349e41f4b71Sopenharmony_ci 350e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 351e41f4b71Sopenharmony_ci 352e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 353e41f4b71Sopenharmony_ci 354e41f4b71Sopenharmony_ci**参数:** 355e41f4b71Sopenharmony_ci 356e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 357e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ | 358e41f4b71Sopenharmony_ci| instanceName | string | 是 | 注册对象时使用的键,调用时可以通过该键值找到相对应的被注册的对象。 | 359e41f4b71Sopenharmony_ci| globalCallObject | Object | 是 | 被注册的对象,ThreadWorker实例会持有被注册对象的强引用。 | 360e41f4b71Sopenharmony_ci 361e41f4b71Sopenharmony_ci**错误码:** 362e41f4b71Sopenharmony_ci 363e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 364e41f4b71Sopenharmony_ci 365e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 366e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | 367e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 368e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 369e41f4b71Sopenharmony_ci 370e41f4b71Sopenharmony_ci**示例:** 371e41f4b71Sopenharmony_ci```ts 372e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 373e41f4b71Sopenharmony_ciclass TestObj { 374e41f4b71Sopenharmony_ci private message : string = "this is a message from TestObj" 375e41f4b71Sopenharmony_ci public getMessage() : string { 376e41f4b71Sopenharmony_ci return this.message; 377e41f4b71Sopenharmony_ci } 378e41f4b71Sopenharmony_ci public getMessageWithInput(str : string) : string { 379e41f4b71Sopenharmony_ci return this.message + " with input: " + str; 380e41f4b71Sopenharmony_ci } 381e41f4b71Sopenharmony_ci} 382e41f4b71Sopenharmony_cilet registerObj = new TestObj(); 383e41f4b71Sopenharmony_ci// 在ThreadWorker实例上注册registerObj 384e41f4b71Sopenharmony_ciworkerInstance.registerGlobalCallObject("myObj", registerObj); 385e41f4b71Sopenharmony_ciworkerInstance.postMessage("start worker") 386e41f4b71Sopenharmony_ci``` 387e41f4b71Sopenharmony_ci 388e41f4b71Sopenharmony_ci### unregisterGlobalCallObject<sup>11+</sup> 389e41f4b71Sopenharmony_ci 390e41f4b71Sopenharmony_ciunregisterGlobalCallObject(instanceName?: string): void 391e41f4b71Sopenharmony_ci 392e41f4b71Sopenharmony_ci取消在宿主线程ThreadWorker实例上注册的对象,该方法会释放ThreadWorker实例中与该键相匹配对象的强引用,没有匹配对象时不会报错。 393e41f4b71Sopenharmony_ci 394e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 395e41f4b71Sopenharmony_ci 396e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 397e41f4b71Sopenharmony_ci 398e41f4b71Sopenharmony_ci**参数:** 399e41f4b71Sopenharmony_ci 400e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 401e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ | 402e41f4b71Sopenharmony_ci| instanceName | string | 否 | 注册对象时使用的键,此参数不填时,会释放ThreadWorker实例中所有已注册的对象。 | 403e41f4b71Sopenharmony_ci 404e41f4b71Sopenharmony_ci**错误码:** 405e41f4b71Sopenharmony_ci 406e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 407e41f4b71Sopenharmony_ci 408e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 409e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | 410e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 411e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 412e41f4b71Sopenharmony_ci 413e41f4b71Sopenharmony_ci**示例:** 414e41f4b71Sopenharmony_ci```ts 415e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 416e41f4b71Sopenharmony_ciclass TestObj { 417e41f4b71Sopenharmony_ci private message : string = "this is a message from TestObj" 418e41f4b71Sopenharmony_ci public getMessage() : string { 419e41f4b71Sopenharmony_ci return this.message; 420e41f4b71Sopenharmony_ci } 421e41f4b71Sopenharmony_ci public getMessageWithInput(str : string) : string { 422e41f4b71Sopenharmony_ci return this.message + " with input: " + str; 423e41f4b71Sopenharmony_ci } 424e41f4b71Sopenharmony_ci} 425e41f4b71Sopenharmony_cilet registerObj = new TestObj(); 426e41f4b71Sopenharmony_ciworkerInstance.registerGlobalCallObject("myObj", registerObj); 427e41f4b71Sopenharmony_ci// 取消对象注册 428e41f4b71Sopenharmony_ciworkerInstance.unregisterGlobalCallObject("myObj"); 429e41f4b71Sopenharmony_ci// 取消ThreadWorker实例上的所有对象注册 430e41f4b71Sopenharmony_ci//workerInstance.unregisterGlobalCallObject(); 431e41f4b71Sopenharmony_ciworkerInstance.postMessage("start worker") 432e41f4b71Sopenharmony_ci``` 433e41f4b71Sopenharmony_ci 434e41f4b71Sopenharmony_ci### terminate<sup>9+</sup> 435e41f4b71Sopenharmony_ci 436e41f4b71Sopenharmony_citerminate(): void 437e41f4b71Sopenharmony_ci 438e41f4b71Sopenharmony_ci销毁Worker线程,终止Worker接收消息。 439e41f4b71Sopenharmony_ci 440e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 441e41f4b71Sopenharmony_ci 442e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 443e41f4b71Sopenharmony_ci 444e41f4b71Sopenharmony_ci**错误码:** 445e41f4b71Sopenharmony_ci 446e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 447e41f4b71Sopenharmony_ci 448e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 449e41f4b71Sopenharmony_ci| -------- | ------------------------------- | 450e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 451e41f4b71Sopenharmony_ci 452e41f4b71Sopenharmony_ci**示例:** 453e41f4b71Sopenharmony_ci 454e41f4b71Sopenharmony_ci```ts 455e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 456e41f4b71Sopenharmony_ciworkerInstance.terminate(); 457e41f4b71Sopenharmony_ci``` 458e41f4b71Sopenharmony_ci 459e41f4b71Sopenharmony_ci 460e41f4b71Sopenharmony_ci### onexit<sup>9+</sup> 461e41f4b71Sopenharmony_ci 462e41f4b71Sopenharmony_cionexit?: (code: number) => void 463e41f4b71Sopenharmony_ci 464e41f4b71Sopenharmony_ci回调函数。表示Worker销毁时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中code类型为number,异常退出为1,正常退出为0。 465e41f4b71Sopenharmony_ci 466e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 467e41f4b71Sopenharmony_ci 468e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 469e41f4b71Sopenharmony_ci 470e41f4b71Sopenharmony_ci**错误码:** 471e41f4b71Sopenharmony_ci 472e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 473e41f4b71Sopenharmony_ci 474e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 475e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 476e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types. | 477e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 478e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. | 479e41f4b71Sopenharmony_ci 480e41f4b71Sopenharmony_ci**示例:** 481e41f4b71Sopenharmony_ci 482e41f4b71Sopenharmony_ci```ts 483e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 484e41f4b71Sopenharmony_ciworkerInstance.onexit = (code) => { 485e41f4b71Sopenharmony_ci console.log("onexit"); 486e41f4b71Sopenharmony_ci} 487e41f4b71Sopenharmony_ci 488e41f4b71Sopenharmony_ci//onexit被执行两种方式: 489e41f4b71Sopenharmony_ci// main thread: 490e41f4b71Sopenharmony_ciworkerInstance.terminate(); 491e41f4b71Sopenharmony_ci 492e41f4b71Sopenharmony_ci// worker线程: 493e41f4b71Sopenharmony_ci//workerPort.close() 494e41f4b71Sopenharmony_ci``` 495e41f4b71Sopenharmony_ci 496e41f4b71Sopenharmony_ci 497e41f4b71Sopenharmony_ci### onerror<sup>9+</sup> 498e41f4b71Sopenharmony_ci 499e41f4b71Sopenharmony_cionerror?: (err: ErrorEvent) => void 500e41f4b71Sopenharmony_ci 501e41f4b71Sopenharmony_ci回调函数。表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中err类型为[ErrorEvent](#errorevent),表示收到的异常数据。 502e41f4b71Sopenharmony_ci 503e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 504e41f4b71Sopenharmony_ci 505e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 506e41f4b71Sopenharmony_ci 507e41f4b71Sopenharmony_ci**错误码:** 508e41f4b71Sopenharmony_ci 509e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 510e41f4b71Sopenharmony_ci 511e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 512e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 513e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types. | 514e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 515e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. | 516e41f4b71Sopenharmony_ci 517e41f4b71Sopenharmony_ci**示例:** 518e41f4b71Sopenharmony_ci 519e41f4b71Sopenharmony_ci```ts 520e41f4b71Sopenharmony_ciimport { worker, ErrorEvent } from '@kit.ArkTS'; 521e41f4b71Sopenharmony_ci 522e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 523e41f4b71Sopenharmony_ciworkerInstance.onerror = (err: ErrorEvent) => { 524e41f4b71Sopenharmony_ci console.log("onerror" + err.message); 525e41f4b71Sopenharmony_ci} 526e41f4b71Sopenharmony_ci``` 527e41f4b71Sopenharmony_ci 528e41f4b71Sopenharmony_ci 529e41f4b71Sopenharmony_ci### onmessage<sup>9+</sup> 530e41f4b71Sopenharmony_ci 531e41f4b71Sopenharmony_cionmessage?: (event: MessageEvents) => void 532e41f4b71Sopenharmony_ci 533e41f4b71Sopenharmony_ci回调函数。表示宿主线程接收到来自其创建的Worker通过workerPort.postMessage接口发送的消息时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中event类型为[MessageEvents](#messageevents9),表示收到的Worker消息数据。 534e41f4b71Sopenharmony_ci 535e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 536e41f4b71Sopenharmony_ci 537e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 538e41f4b71Sopenharmony_ci 539e41f4b71Sopenharmony_ci**错误码:** 540e41f4b71Sopenharmony_ci 541e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 542e41f4b71Sopenharmony_ci 543e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 544e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 545e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types. | 546e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 547e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. | 548e41f4b71Sopenharmony_ci 549e41f4b71Sopenharmony_ci**示例:** 550e41f4b71Sopenharmony_ci 551e41f4b71Sopenharmony_ci```ts 552e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 553e41f4b71Sopenharmony_ci 554e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 555e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => { 556e41f4b71Sopenharmony_ci // e : MessageEvents, 用法如下: 557e41f4b71Sopenharmony_ci // let data = e.data; 558e41f4b71Sopenharmony_ci console.log("onmessage"); 559e41f4b71Sopenharmony_ci} 560e41f4b71Sopenharmony_ci``` 561e41f4b71Sopenharmony_ci 562e41f4b71Sopenharmony_ci 563e41f4b71Sopenharmony_ci### onmessageerror<sup>9+</sup> 564e41f4b71Sopenharmony_ci 565e41f4b71Sopenharmony_cionmessageerror?: (event: MessageEvents) => void 566e41f4b71Sopenharmony_ci 567e41f4b71Sopenharmony_ci回调函数。表示当Worker对象接收到一条无法被序列化的消息时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中event类型为[MessageEvents](#messageevents9),表示收到的Worker消息数据。 568e41f4b71Sopenharmony_ci 569e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 570e41f4b71Sopenharmony_ci 571e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 572e41f4b71Sopenharmony_ci 573e41f4b71Sopenharmony_ci**错误码:** 574e41f4b71Sopenharmony_ci 575e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 576e41f4b71Sopenharmony_ci 577e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 578e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 579e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1.Incorrect parameter types. | 580e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 581e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. | 582e41f4b71Sopenharmony_ci 583e41f4b71Sopenharmony_ci**示例:** 584e41f4b71Sopenharmony_ci 585e41f4b71Sopenharmony_ci```ts 586e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 587e41f4b71Sopenharmony_ci 588e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 589e41f4b71Sopenharmony_ciworkerInstance.onmessageerror = (err: MessageEvents) => { 590e41f4b71Sopenharmony_ci console.log("onmessageerror"); 591e41f4b71Sopenharmony_ci} 592e41f4b71Sopenharmony_ci``` 593e41f4b71Sopenharmony_ci 594e41f4b71Sopenharmony_ci### addEventListener<sup>9+</sup> 595e41f4b71Sopenharmony_ci 596e41f4b71Sopenharmony_ciaddEventListener(type: string, listener: WorkerEventListener): void 597e41f4b71Sopenharmony_ci 598e41f4b71Sopenharmony_ci向Worker添加一个事件监听,该接口与[on<sup>9+</sup>](#on9)接口功能一致。 599e41f4b71Sopenharmony_ci 600e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 601e41f4b71Sopenharmony_ci 602e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 603e41f4b71Sopenharmony_ci 604e41f4b71Sopenharmony_ci**参数:** 605e41f4b71Sopenharmony_ci 606e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 607e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------- | 608e41f4b71Sopenharmony_ci| type | string | 是 | 监听的事件类型。 | 609e41f4b71Sopenharmony_ci| listener | [WorkerEventListener](#workereventlistener9) | 是 | 回调的事件。 | 610e41f4b71Sopenharmony_ci 611e41f4b71Sopenharmony_ci**错误码:** 612e41f4b71Sopenharmony_ci 613e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 614e41f4b71Sopenharmony_ci 615e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 616e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 617e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 618e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 619e41f4b71Sopenharmony_ci| 10200005 | The invoked API is not supported in workers. | 620e41f4b71Sopenharmony_ci 621e41f4b71Sopenharmony_ci**示例:** 622e41f4b71Sopenharmony_ci 623e41f4b71Sopenharmony_ci```ts 624e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 625e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 626e41f4b71Sopenharmony_ci console.log("alert listener callback"); 627e41f4b71Sopenharmony_ci}) 628e41f4b71Sopenharmony_ci``` 629e41f4b71Sopenharmony_ci 630e41f4b71Sopenharmony_ci 631e41f4b71Sopenharmony_ci### removeEventListener<sup>9+</sup> 632e41f4b71Sopenharmony_ci 633e41f4b71Sopenharmony_ciremoveEventListener(type: string, callback?: WorkerEventListener): void 634e41f4b71Sopenharmony_ci 635e41f4b71Sopenharmony_ci删除Worker的事件监听,该接口与[off<sup>9+</sup>](#off9)接口功能一致。 636e41f4b71Sopenharmony_ci 637e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 638e41f4b71Sopenharmony_ci 639e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 640e41f4b71Sopenharmony_ci 641e41f4b71Sopenharmony_ci**参数:** 642e41f4b71Sopenharmony_ci 643e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 644e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------------------- | 645e41f4b71Sopenharmony_ci| type | string | 是 | 需要删除的监听事件类型。 | 646e41f4b71Sopenharmony_ci| callback | [WorkerEventListener](#workereventlistener9) | 否 | 删除监听事件后所执行的回调事件。 | 647e41f4b71Sopenharmony_ci 648e41f4b71Sopenharmony_ci**错误码:** 649e41f4b71Sopenharmony_ci 650e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 651e41f4b71Sopenharmony_ci 652e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 653e41f4b71Sopenharmony_ci| -------- | ------------------------------- | 654e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 655e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 656e41f4b71Sopenharmony_ci 657e41f4b71Sopenharmony_ci**示例:** 658e41f4b71Sopenharmony_ci 659e41f4b71Sopenharmony_ci```ts 660e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 661e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 662e41f4b71Sopenharmony_ci console.log("alert listener callback"); 663e41f4b71Sopenharmony_ci}) 664e41f4b71Sopenharmony_ciworkerInstance.removeEventListener("alert"); 665e41f4b71Sopenharmony_ci``` 666e41f4b71Sopenharmony_ci 667e41f4b71Sopenharmony_ci 668e41f4b71Sopenharmony_ci### dispatchEvent<sup>9+</sup> 669e41f4b71Sopenharmony_ci 670e41f4b71Sopenharmony_cidispatchEvent(event: Event): boolean 671e41f4b71Sopenharmony_ci 672e41f4b71Sopenharmony_ci分发定义在Worker的事件。 673e41f4b71Sopenharmony_ci 674e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 675e41f4b71Sopenharmony_ci 676e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 677e41f4b71Sopenharmony_ci 678e41f4b71Sopenharmony_ci**参数:** 679e41f4b71Sopenharmony_ci 680e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 681e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | ---------------- | 682e41f4b71Sopenharmony_ci| event | [Event](#event) | 是 | 需要分发的事件。 | 683e41f4b71Sopenharmony_ci 684e41f4b71Sopenharmony_ci**返回值:** 685e41f4b71Sopenharmony_ci 686e41f4b71Sopenharmony_ci| 类型 | 说明 | 687e41f4b71Sopenharmony_ci| ------- | ------------------------------- | 688e41f4b71Sopenharmony_ci| boolean | 分发的结果,true表示分发成功,false表示分发失败。 | 689e41f4b71Sopenharmony_ci 690e41f4b71Sopenharmony_ci**错误码:** 691e41f4b71Sopenharmony_ci 692e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 693e41f4b71Sopenharmony_ci 694e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 695e41f4b71Sopenharmony_ci| -------- | ------------------------------- | 696e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 697e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 698e41f4b71Sopenharmony_ci 699e41f4b71Sopenharmony_ci**示例:** 700e41f4b71Sopenharmony_ci 701e41f4b71Sopenharmony_ci```ts 702e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 703e41f4b71Sopenharmony_ci 704e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未支持。 705e41f4b71Sopenharmony_ci``` 706e41f4b71Sopenharmony_ci 707e41f4b71Sopenharmony_ci分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下: 708e41f4b71Sopenharmony_ci 709e41f4b71Sopenharmony_ci```ts 710e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 711e41f4b71Sopenharmony_ci 712e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 713e41f4b71Sopenharmony_ci 714e41f4b71Sopenharmony_ci//用法一: 715e41f4b71Sopenharmony_ciworkerInstance.on("alert_on", (e)=>{ 716e41f4b71Sopenharmony_ci console.log("alert listener callback"); 717e41f4b71Sopenharmony_ci}) 718e41f4b71Sopenharmony_ciworkerInstance.once("alert_once", (e)=>{ 719e41f4b71Sopenharmony_ci console.log("alert listener callback"); 720e41f4b71Sopenharmony_ci}) 721e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert_add", (e)=>{ 722e41f4b71Sopenharmony_ci console.log("alert listener callback"); 723e41f4b71Sopenharmony_ci}) 724e41f4b71Sopenharmony_ci 725e41f4b71Sopenharmony_ci//once接口创建的事件执行一次便会删除。 726e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_once", timeStamp:0});//timeStamp暂未支持。 727e41f4b71Sopenharmony_ci//on接口创建的事件可以一直被分发,不能主动删除。 728e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0}); 729e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0}); 730e41f4b71Sopenharmony_ci//addEventListener接口创建的事件可以一直被分发,不能主动删除。 731e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0}); 732e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0}); 733e41f4b71Sopenharmony_ci 734e41f4b71Sopenharmony_ci//用法二: 735e41f4b71Sopenharmony_ci//event类型的type支持自定义,同时存在"message"/"messageerror"/"error"特殊类型,如下所示 736e41f4b71Sopenharmony_ci//当type = "message",onmessage接口定义的方法同时会执行。 737e41f4b71Sopenharmony_ci//当type = "messageerror",onmessageerror接口定义的方法同时会执行。 738e41f4b71Sopenharmony_ci//当type = "error",onerror接口定义的方法同时会执行。 739e41f4b71Sopenharmony_ci//若调用removeEventListener接口或者off接口取消事件时,能且只能取消使用addEventListener/on/once创建的事件。 740e41f4b71Sopenharmony_ci 741e41f4b71Sopenharmony_ciworkerInstance.addEventListener("message", (e)=>{ 742e41f4b71Sopenharmony_ci console.log("message listener callback"); 743e41f4b71Sopenharmony_ci}) 744e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => { 745e41f4b71Sopenharmony_ci console.log("onmessage : message listener callback"); 746e41f4b71Sopenharmony_ci} 747e41f4b71Sopenharmony_ci//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。 748e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"message", timeStamp:0}); 749e41f4b71Sopenharmony_ci``` 750e41f4b71Sopenharmony_ci 751e41f4b71Sopenharmony_ci 752e41f4b71Sopenharmony_ci### removeAllListener<sup>9+</sup> 753e41f4b71Sopenharmony_ci 754e41f4b71Sopenharmony_ciremoveAllListener(): void 755e41f4b71Sopenharmony_ci 756e41f4b71Sopenharmony_ci删除Worker所有的事件监听。 757e41f4b71Sopenharmony_ci 758e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 759e41f4b71Sopenharmony_ci 760e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 761e41f4b71Sopenharmony_ci 762e41f4b71Sopenharmony_ci**错误码:** 763e41f4b71Sopenharmony_ci 764e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 765e41f4b71Sopenharmony_ci 766e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 767e41f4b71Sopenharmony_ci| -------- | ------------------------------- | 768e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 769e41f4b71Sopenharmony_ci 770e41f4b71Sopenharmony_ci**示例:** 771e41f4b71Sopenharmony_ci 772e41f4b71Sopenharmony_ci```ts 773e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 774e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 775e41f4b71Sopenharmony_ci console.log("alert listener callback"); 776e41f4b71Sopenharmony_ci}) 777e41f4b71Sopenharmony_ciworkerInstance.removeAllListener(); 778e41f4b71Sopenharmony_ci``` 779e41f4b71Sopenharmony_ci 780e41f4b71Sopenharmony_ci## WorkerEventTarget<sup>9+</sup> 781e41f4b71Sopenharmony_ci 782e41f4b71Sopenharmony_ci处理Worker监听事件。 783e41f4b71Sopenharmony_ci 784e41f4b71Sopenharmony_ci### addEventListener<sup>9+</sup> 785e41f4b71Sopenharmony_ci 786e41f4b71Sopenharmony_ciaddEventListener(type: string, listener: WorkerEventListener): void 787e41f4b71Sopenharmony_ci 788e41f4b71Sopenharmony_ci向Worker添加一个事件监听,该接口与[on<sup>9+</sup>](#on9)接口功能一致。 789e41f4b71Sopenharmony_ci 790e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 791e41f4b71Sopenharmony_ci 792e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 793e41f4b71Sopenharmony_ci 794e41f4b71Sopenharmony_ci**参数:** 795e41f4b71Sopenharmony_ci 796e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 797e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------- | 798e41f4b71Sopenharmony_ci| type | string | 是 | 监听的事件类型。 | 799e41f4b71Sopenharmony_ci| listener | [WorkerEventListener](#workereventlistener9) | 是 | 回调的事件。 | 800e41f4b71Sopenharmony_ci 801e41f4b71Sopenharmony_ci**错误码:** 802e41f4b71Sopenharmony_ci 803e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 804e41f4b71Sopenharmony_ci 805e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 806e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 807e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 808e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 809e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. | 810e41f4b71Sopenharmony_ci 811e41f4b71Sopenharmony_ci**示例:** 812e41f4b71Sopenharmony_ci 813e41f4b71Sopenharmony_ci```ts 814e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 815e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 816e41f4b71Sopenharmony_ci console.log("alert listener callback"); 817e41f4b71Sopenharmony_ci}) 818e41f4b71Sopenharmony_ci``` 819e41f4b71Sopenharmony_ci 820e41f4b71Sopenharmony_ci 821e41f4b71Sopenharmony_ci### removeEventListener<sup>9+</sup> 822e41f4b71Sopenharmony_ci 823e41f4b71Sopenharmony_ciremoveEventListener(type: string, callback?: WorkerEventListener): void 824e41f4b71Sopenharmony_ci 825e41f4b71Sopenharmony_ci删除Worker的事件监听,该接口与[off<sup>9+</sup>](#off9)接口功能一致。 826e41f4b71Sopenharmony_ci 827e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 828e41f4b71Sopenharmony_ci 829e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 830e41f4b71Sopenharmony_ci 831e41f4b71Sopenharmony_ci**参数:** 832e41f4b71Sopenharmony_ci 833e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 834e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------------------- | 835e41f4b71Sopenharmony_ci| type | string | 是 | 需要删除的监听事件类型。 | 836e41f4b71Sopenharmony_ci| callback | [WorkerEventListener](#workereventlistener9) | 否 | 删除监听事件后所执行的回调事件。 | 837e41f4b71Sopenharmony_ci 838e41f4b71Sopenharmony_ci**错误码:** 839e41f4b71Sopenharmony_ci 840e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 841e41f4b71Sopenharmony_ci 842e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 843e41f4b71Sopenharmony_ci| -------- | ------------------------------- | 844e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 845e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 846e41f4b71Sopenharmony_ci 847e41f4b71Sopenharmony_ci**示例:** 848e41f4b71Sopenharmony_ci 849e41f4b71Sopenharmony_ci```ts 850e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 851e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 852e41f4b71Sopenharmony_ci console.log("alert listener callback"); 853e41f4b71Sopenharmony_ci}) 854e41f4b71Sopenharmony_ciworkerInstance.removeEventListener("alert"); 855e41f4b71Sopenharmony_ci``` 856e41f4b71Sopenharmony_ci 857e41f4b71Sopenharmony_ci 858e41f4b71Sopenharmony_ci### dispatchEvent<sup>9+</sup> 859e41f4b71Sopenharmony_ci 860e41f4b71Sopenharmony_cidispatchEvent(event: Event): boolean 861e41f4b71Sopenharmony_ci 862e41f4b71Sopenharmony_ci分发定义在Worker的事件。 863e41f4b71Sopenharmony_ci 864e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 865e41f4b71Sopenharmony_ci 866e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 867e41f4b71Sopenharmony_ci 868e41f4b71Sopenharmony_ci**参数:** 869e41f4b71Sopenharmony_ci 870e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 871e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | ---------------- | 872e41f4b71Sopenharmony_ci| event | [Event](#event) | 是 | 需要分发的事件。 | 873e41f4b71Sopenharmony_ci 874e41f4b71Sopenharmony_ci**返回值:** 875e41f4b71Sopenharmony_ci 876e41f4b71Sopenharmony_ci| 类型 | 说明 | 877e41f4b71Sopenharmony_ci| ------- | ------------------------------- | 878e41f4b71Sopenharmony_ci| boolean | 分发的结果,false表示分发失败。 | 879e41f4b71Sopenharmony_ci 880e41f4b71Sopenharmony_ci**错误码:** 881e41f4b71Sopenharmony_ci 882e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 883e41f4b71Sopenharmony_ci 884e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 885e41f4b71Sopenharmony_ci| -------- | ------------------------------- | 886e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 887e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 888e41f4b71Sopenharmony_ci 889e41f4b71Sopenharmony_ci**示例:** 890e41f4b71Sopenharmony_ci 891e41f4b71Sopenharmony_ci```ts 892e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 893e41f4b71Sopenharmony_ci 894e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未支持。 895e41f4b71Sopenharmony_ci``` 896e41f4b71Sopenharmony_ci 897e41f4b71Sopenharmony_ci分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下: 898e41f4b71Sopenharmony_ci 899e41f4b71Sopenharmony_ci```ts 900e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 901e41f4b71Sopenharmony_ci 902e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 903e41f4b71Sopenharmony_ci 904e41f4b71Sopenharmony_ci//用法一: 905e41f4b71Sopenharmony_ciworkerInstance.on("alert_on", (e)=>{ 906e41f4b71Sopenharmony_ci console.log("alert listener callback"); 907e41f4b71Sopenharmony_ci}) 908e41f4b71Sopenharmony_ciworkerInstance.once("alert_once", (e)=>{ 909e41f4b71Sopenharmony_ci console.log("alert listener callback"); 910e41f4b71Sopenharmony_ci}) 911e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert_add", (e)=>{ 912e41f4b71Sopenharmony_ci console.log("alert listener callback"); 913e41f4b71Sopenharmony_ci}) 914e41f4b71Sopenharmony_ci 915e41f4b71Sopenharmony_ci//once接口创建的事件执行一次便会删除。 916e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_once", timeStamp:0});//timeStamp暂未支持。 917e41f4b71Sopenharmony_ci//on接口创建的事件可以一直被分发,不能主动删除。 918e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0}); 919e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0}); 920e41f4b71Sopenharmony_ci//addEventListener接口创建的事件可以一直被分发,不能主动删除。 921e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0}); 922e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0}); 923e41f4b71Sopenharmony_ci 924e41f4b71Sopenharmony_ci//用法二: 925e41f4b71Sopenharmony_ci//event类型的type支持自定义,同时存在"message"/"messageerror"/"error"特殊类型,如下所示 926e41f4b71Sopenharmony_ci//当type = "message",onmessage接口定义的方法同时会执行。 927e41f4b71Sopenharmony_ci//当type = "messageerror",onmessageerror接口定义的方法同时会执行。 928e41f4b71Sopenharmony_ci//当type = "error",onerror接口定义的方法同时会执行。 929e41f4b71Sopenharmony_ci//若调用removeEventListener接口或者off接口取消事件时,能且只能取消使用addEventListener/on/once创建的事件。 930e41f4b71Sopenharmony_ci 931e41f4b71Sopenharmony_ciworkerInstance.addEventListener("message", (e)=>{ 932e41f4b71Sopenharmony_ci console.log("message listener callback"); 933e41f4b71Sopenharmony_ci}) 934e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => { 935e41f4b71Sopenharmony_ci console.log("onmessage : message listener callback"); 936e41f4b71Sopenharmony_ci} 937e41f4b71Sopenharmony_ci//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。 938e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"message", timeStamp:0}); 939e41f4b71Sopenharmony_ci``` 940e41f4b71Sopenharmony_ci 941e41f4b71Sopenharmony_ci 942e41f4b71Sopenharmony_ci### removeAllListener<sup>9+</sup> 943e41f4b71Sopenharmony_ci 944e41f4b71Sopenharmony_ciremoveAllListener(): void 945e41f4b71Sopenharmony_ci 946e41f4b71Sopenharmony_ci删除Worker所有的事件监听。 947e41f4b71Sopenharmony_ci 948e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 949e41f4b71Sopenharmony_ci 950e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 951e41f4b71Sopenharmony_ci 952e41f4b71Sopenharmony_ci**错误码:** 953e41f4b71Sopenharmony_ci 954e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 955e41f4b71Sopenharmony_ci 956e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 957e41f4b71Sopenharmony_ci| -------- | ------------------------------- | 958e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 959e41f4b71Sopenharmony_ci 960e41f4b71Sopenharmony_ci**示例:** 961e41f4b71Sopenharmony_ci 962e41f4b71Sopenharmony_ci```ts 963e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 964e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 965e41f4b71Sopenharmony_ci console.log("alert listener callback"); 966e41f4b71Sopenharmony_ci}) 967e41f4b71Sopenharmony_ciworkerInstance.removeAllListener(); 968e41f4b71Sopenharmony_ci``` 969e41f4b71Sopenharmony_ci 970e41f4b71Sopenharmony_ci 971e41f4b71Sopenharmony_ci## ThreadWorkerGlobalScope<sup>9+</sup> 972e41f4b71Sopenharmony_ci 973e41f4b71Sopenharmony_ciWorker线程用于与宿主线程通信的类,通过postMessage接口发送消息给宿主线程、close接口销毁Worker线程。ThreadWorkerGlobalScope类继承[GlobalScope<sup>9+</sup>](#globalscope9)。 974e41f4b71Sopenharmony_ci 975e41f4b71Sopenharmony_ci### postMessage<sup>9+</sup> 976e41f4b71Sopenharmony_ci 977e41f4b71Sopenharmony_cipostMessage(messageObject: Object, transfer: ArrayBuffer[]): void; 978e41f4b71Sopenharmony_ci 979e41f4b71Sopenharmony_ciWorker线程通过转移对象所有权的方式向宿主线程发送消息。 980e41f4b71Sopenharmony_ci 981e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 982e41f4b71Sopenharmony_ci 983e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 984e41f4b71Sopenharmony_ci 985e41f4b71Sopenharmony_ci**参数:** 986e41f4b71Sopenharmony_ci 987e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 988e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ | 989e41f4b71Sopenharmony_ci| messageObject | Object | 是 | 发送至宿主线程的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 | 990e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 是 | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到宿主线程,在Worker线程中将会变为不可用,仅在宿主线程中可用,数组不可传入null。 | 991e41f4b71Sopenharmony_ci 992e41f4b71Sopenharmony_ci**错误码:** 993e41f4b71Sopenharmony_ci 994e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 995e41f4b71Sopenharmony_ci 996e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 997e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | 998e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 999e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 1000e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 1001e41f4b71Sopenharmony_ci 1002e41f4b71Sopenharmony_ci**示例:** 1003e41f4b71Sopenharmony_ci 1004e41f4b71Sopenharmony_ci```ts 1005e41f4b71Sopenharmony_ci// main thread 1006e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 1007e41f4b71Sopenharmony_ci 1008e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 1009e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world"); 1010e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => { 1011e41f4b71Sopenharmony_ci console.log("receive data from worker.ets"); 1012e41f4b71Sopenharmony_ci} 1013e41f4b71Sopenharmony_ci``` 1014e41f4b71Sopenharmony_ci 1015e41f4b71Sopenharmony_ci```ts 1016e41f4b71Sopenharmony_ci// worker.ets 1017e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 1018e41f4b71Sopenharmony_ci 1019e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort; 1020e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => { 1021e41f4b71Sopenharmony_ci let buffer = new ArrayBuffer(8); 1022e41f4b71Sopenharmony_ci workerPort.postMessage(buffer, [buffer]); 1023e41f4b71Sopenharmony_ci} 1024e41f4b71Sopenharmony_ci``` 1025e41f4b71Sopenharmony_ci 1026e41f4b71Sopenharmony_ci### postMessage<sup>9+</sup> 1027e41f4b71Sopenharmony_ci 1028e41f4b71Sopenharmony_cipostMessage(messageObject: Object, options?: PostMessageOptions): void 1029e41f4b71Sopenharmony_ci 1030e41f4b71Sopenharmony_ciWorker线程通过转移对象所有权或者拷贝数据的方式向宿主线程发送消息。 1031e41f4b71Sopenharmony_ci 1032e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1033e41f4b71Sopenharmony_ci 1034e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1035e41f4b71Sopenharmony_ci 1036e41f4b71Sopenharmony_ci**参数:** 1037e41f4b71Sopenharmony_ci 1038e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1039e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 1040e41f4b71Sopenharmony_ci| messageObject | Object | 是 | 发送至宿主线程的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 | 1041e41f4b71Sopenharmony_ci| options | [PostMessageOptions](#postmessageoptions) | 否 | 当填入该参数时,与传入ArrayBuffer[]的作用一致,该数组中对象的所有权会被转移到宿主线程,在Worker线程中将会变为不可用,仅在宿主线程中可用。<br/>若不填入该参数,默认设置为 undefined,通过拷贝数据的方式传输信息到宿主线程。 | 1042e41f4b71Sopenharmony_ci 1043e41f4b71Sopenharmony_ci**错误码:** 1044e41f4b71Sopenharmony_ci 1045e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1046e41f4b71Sopenharmony_ci 1047e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1048e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | 1049e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1050e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 1051e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 1052e41f4b71Sopenharmony_ci 1053e41f4b71Sopenharmony_ci**示例:** 1054e41f4b71Sopenharmony_ci 1055e41f4b71Sopenharmony_ci```ts 1056e41f4b71Sopenharmony_ci// main thread 1057e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 1058e41f4b71Sopenharmony_ci 1059e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 1060e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world"); 1061e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => { 1062e41f4b71Sopenharmony_ci console.log("receive data from worker.ets"); 1063e41f4b71Sopenharmony_ci} 1064e41f4b71Sopenharmony_ci``` 1065e41f4b71Sopenharmony_ci 1066e41f4b71Sopenharmony_ci```ts 1067e41f4b71Sopenharmony_ci// worker.ets 1068e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 1069e41f4b71Sopenharmony_ci 1070e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort; 1071e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => { 1072e41f4b71Sopenharmony_ci workerPort.postMessage("receive data from main thread"); 1073e41f4b71Sopenharmony_ci} 1074e41f4b71Sopenharmony_ci``` 1075e41f4b71Sopenharmony_ci 1076e41f4b71Sopenharmony_ci 1077e41f4b71Sopenharmony_ci### postMessageWithSharedSendable<sup>12+</sup> 1078e41f4b71Sopenharmony_ci 1079e41f4b71Sopenharmony_cipostMessageWithSharedSendable(message: Object, transfer?: ArrayBuffer[]): void 1080e41f4b71Sopenharmony_ci 1081e41f4b71Sopenharmony_ciWorker线程向宿主线程发送消息,消息中的Sendable对象通过引用传递,消息中的非Sendable对象通过序列化传递。 1082e41f4b71Sopenharmony_ci 1083e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。 1084e41f4b71Sopenharmony_ci 1085e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1086e41f4b71Sopenharmony_ci 1087e41f4b71Sopenharmony_ci**参数:** 1088e41f4b71Sopenharmony_ci 1089e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1090e41f4b71Sopenharmony_ci| --------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 1091e41f4b71Sopenharmony_ci| message | Object | 是 | 发送至宿主线程的数据,该数据对象必须是可序列化或可共享,序列化支持类型见[序列化类型说明](#序列化支持类型),共享支持类型见[Sendable支持的数据类型](../../arkts-utils/sendable-overview.md#sendable支持的数据类型)。 | 1092e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 否 | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到宿主线程,在Worker线程中将会变为不可用,仅在宿主线程中可用,数组不可传入null。默认值为空数组。 | 1093e41f4b71Sopenharmony_ci 1094e41f4b71Sopenharmony_ci**错误码:** 1095e41f4b71Sopenharmony_ci 1096e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1097e41f4b71Sopenharmony_ci 1098e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1099e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | 1100e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1101e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 1102e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 1103e41f4b71Sopenharmony_ci 1104e41f4b71Sopenharmony_ci**示例:** 1105e41f4b71Sopenharmony_ci 1106e41f4b71Sopenharmony_ci<!--code_no_check--> 1107e41f4b71Sopenharmony_ci```ts 1108e41f4b71Sopenharmony_ci// worker文件路径为:entry/src/main/ets/workers/Worker.ets 1109e41f4b71Sopenharmony_ci// Worker.ets 1110e41f4b71Sopenharmony_ci// 新建SendableObject实例并通过worker线程传递至宿主线程 1111e41f4b71Sopenharmony_ci 1112e41f4b71Sopenharmony_ciimport { SendableObject } from '../pages/sendable' 1113e41f4b71Sopenharmony_ciimport { worker, ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@kit.ArkTS'; 1114e41f4b71Sopenharmony_ci 1115e41f4b71Sopenharmony_ciconst workerPort: ThreadWorkerGlobalScope = worker.workerPort; 1116e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents) => { 1117e41f4b71Sopenharmony_ci let object: SendableObject = new SendableObject(); 1118e41f4b71Sopenharmony_ci workerPort.postMessageWithSharedSendable(object); 1119e41f4b71Sopenharmony_ci} 1120e41f4b71Sopenharmony_ci``` 1121e41f4b71Sopenharmony_ci 1122e41f4b71Sopenharmony_ci```ts 1123e41f4b71Sopenharmony_ci// sendable.ets 1124e41f4b71Sopenharmony_ci// 定义SendableObject 1125e41f4b71Sopenharmony_ci 1126e41f4b71Sopenharmony_ci@Sendable 1127e41f4b71Sopenharmony_ciexport class SendableObject { 1128e41f4b71Sopenharmony_ci a:number = 45; 1129e41f4b71Sopenharmony_ci} 1130e41f4b71Sopenharmony_ci``` 1131e41f4b71Sopenharmony_ci 1132e41f4b71Sopenharmony_ci<!--code_no_check--> 1133e41f4b71Sopenharmony_ci```ts 1134e41f4b71Sopenharmony_ci// Index.ets 1135e41f4b71Sopenharmony_ci// 接收worker线程传递至宿主线程的数据并访问其属性 1136e41f4b71Sopenharmony_ci 1137e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 1138e41f4b71Sopenharmony_ciimport { SendableObject } from './sendable' 1139e41f4b71Sopenharmony_ci 1140e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/Worker.ets"); 1141e41f4b71Sopenharmony_ciworkerInstance.postMessage(1); 1142e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents) => { 1143e41f4b71Sopenharmony_ci let obj: SendableObject = e.data; 1144e41f4b71Sopenharmony_ci console.info("sendable index obj is: " + obj.a); 1145e41f4b71Sopenharmony_ci} 1146e41f4b71Sopenharmony_ci``` 1147e41f4b71Sopenharmony_ci 1148e41f4b71Sopenharmony_ci 1149e41f4b71Sopenharmony_ci### callGlobalCallObjectMethod<sup>11+</sup> 1150e41f4b71Sopenharmony_ci 1151e41f4b71Sopenharmony_cicallGlobalCallObjectMethod(instanceName: string, methodName: string, timeout: number, ...args: Object[]): Object 1152e41f4b71Sopenharmony_ci 1153e41f4b71Sopenharmony_ciWorker线程调用注册在宿主线程上某个对象的指定方法,调用对于Worker线程是同步的,对于宿主线程是异步的,返回值通过序列化传递。 1154e41f4b71Sopenharmony_ci 1155e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1156e41f4b71Sopenharmony_ci 1157e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1158e41f4b71Sopenharmony_ci 1159e41f4b71Sopenharmony_ci**参数:** 1160e41f4b71Sopenharmony_ci 1161e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1162e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 1163e41f4b71Sopenharmony_ci| instanceName | string | 是 | 注册对象时使用的键,用于在宿主线程查找对象。 | 1164e41f4b71Sopenharmony_ci| methodName | string | 是 | 在已注册对象上调用的方法名,注意该方法不能为使用async或generator修饰的方法,或底层使用了异步机制等异步返回结果的方法,否则会抛出异常。 | 1165e41f4b71Sopenharmony_ci| timeout | number | 是 | 本次同步调用的等待时间单位为ms,取整数,取值范围为[1-5000]ms。也可取特殊值0,此时表示本次调用等待时间为5000ms。 | 1166e41f4b71Sopenharmony_ci| args | Object[] | 否 | 注册对象上所调用方法的参数数组。 | 1167e41f4b71Sopenharmony_ci 1168e41f4b71Sopenharmony_ci**返回值:** 1169e41f4b71Sopenharmony_ci 1170e41f4b71Sopenharmony_ci| 类型 | 说明 | 1171e41f4b71Sopenharmony_ci| ------------------------------------- | ------------------------------- | 1172e41f4b71Sopenharmony_ci| Object | 返回值为调用方法在宿主线程的返回值,该返回值必须是可序列化的,具体可见序列化支持类型。| 1173e41f4b71Sopenharmony_ci 1174e41f4b71Sopenharmony_ci**错误码:** 1175e41f4b71Sopenharmony_ci 1176e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1177e41f4b71Sopenharmony_ci 1178e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1179e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | 1180e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1181e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 1182e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. | 1183e41f4b71Sopenharmony_ci| 10200019 | The globalCallObject is not registered. | 1184e41f4b71Sopenharmony_ci| 10200020 | The method to be called is not callable or is an async method or a generator. | 1185e41f4b71Sopenharmony_ci| 10200021 | The global call exceeds the timeout. | 1186e41f4b71Sopenharmony_ci 1187e41f4b71Sopenharmony_ci**示例:** 1188e41f4b71Sopenharmony_ci```ts 1189e41f4b71Sopenharmony_ci// worker.ets 1190e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 1191e41f4b71Sopenharmony_ci 1192e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort; 1193e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => { 1194e41f4b71Sopenharmony_ci try { 1195e41f4b71Sopenharmony_ci // 调用方法无入参 1196e41f4b71Sopenharmony_ci let res : string = workerPort.callGlobalCallObjectMethod("myObj", "getMessage", 0) as string; 1197e41f4b71Sopenharmony_ci console.info("worker:", res) // worker: this is a message from TestObj 1198e41f4b71Sopenharmony_ci } catch (error) { 1199e41f4b71Sopenharmony_ci // 异常处理 1200e41f4b71Sopenharmony_ci console.error("worker: error code is " + error.code + " error message is " + error.message); 1201e41f4b71Sopenharmony_ci } 1202e41f4b71Sopenharmony_ci try { 1203e41f4b71Sopenharmony_ci // 调用方法有入参 1204e41f4b71Sopenharmony_ci let res : string = workerPort.callGlobalCallObjectMethod("myObj", "getMessageWithInput", 0, "hello there!") as string; 1205e41f4b71Sopenharmony_ci console.info("worker:", res) //worker: this is a message from TestObj with input: hello there! 1206e41f4b71Sopenharmony_ci } catch (error) { 1207e41f4b71Sopenharmony_ci // 异常处理 1208e41f4b71Sopenharmony_ci console.error("worker: error code is " + error.code + " error message is " + error.message); 1209e41f4b71Sopenharmony_ci } 1210e41f4b71Sopenharmony_ci} 1211e41f4b71Sopenharmony_ci``` 1212e41f4b71Sopenharmony_ci 1213e41f4b71Sopenharmony_ci### close<sup>9+</sup> 1214e41f4b71Sopenharmony_ci 1215e41f4b71Sopenharmony_ciclose(): void 1216e41f4b71Sopenharmony_ci 1217e41f4b71Sopenharmony_ci销毁Worker线程,终止Worker接收消息。 1218e41f4b71Sopenharmony_ci 1219e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1220e41f4b71Sopenharmony_ci 1221e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1222e41f4b71Sopenharmony_ci 1223e41f4b71Sopenharmony_ci**错误码:** 1224e41f4b71Sopenharmony_ci 1225e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 1226e41f4b71Sopenharmony_ci 1227e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1228e41f4b71Sopenharmony_ci| -------- | ------------------------------- | 1229e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 1230e41f4b71Sopenharmony_ci 1231e41f4b71Sopenharmony_ci**示例:** 1232e41f4b71Sopenharmony_ci 1233e41f4b71Sopenharmony_ci```ts 1234e41f4b71Sopenharmony_ci// main thread 1235e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 1236e41f4b71Sopenharmony_ci 1237e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 1238e41f4b71Sopenharmony_ci``` 1239e41f4b71Sopenharmony_ci 1240e41f4b71Sopenharmony_ci```ts 1241e41f4b71Sopenharmony_ci// worker.ets 1242e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 1243e41f4b71Sopenharmony_ci 1244e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort; 1245e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => { 1246e41f4b71Sopenharmony_ci workerPort.close() 1247e41f4b71Sopenharmony_ci} 1248e41f4b71Sopenharmony_ci``` 1249e41f4b71Sopenharmony_ci 1250e41f4b71Sopenharmony_ci 1251e41f4b71Sopenharmony_ci### onmessage<sup>9+</sup> 1252e41f4b71Sopenharmony_ci 1253e41f4b71Sopenharmony_cionmessage?: (this: ThreadWorkerGlobalScope, ev: MessageEvents) => void 1254e41f4b71Sopenharmony_ci 1255e41f4b71Sopenharmony_ci回调函数。ThreadWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主线程通过postMessage接口发送的消息时被调用的事件处理程序,处理程序在Worker线程中执行。其中this指调用者对象本身[ThreadWorkerGlobalScope](#threadworkerglobalscope9),ev类型为[MessageEvents](#messageevents9),表示收到的Worker消息数据。 1256e41f4b71Sopenharmony_ci 1257e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1258e41f4b71Sopenharmony_ci 1259e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1260e41f4b71Sopenharmony_ci 1261e41f4b71Sopenharmony_ci**错误码:** 1262e41f4b71Sopenharmony_ci 1263e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1264e41f4b71Sopenharmony_ci 1265e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1266e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 1267e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 1268e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 1269e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. | 1270e41f4b71Sopenharmony_ci 1271e41f4b71Sopenharmony_ci**示例:** 1272e41f4b71Sopenharmony_ci 1273e41f4b71Sopenharmony_ci```ts 1274e41f4b71Sopenharmony_ci// main thread 1275e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 1276e41f4b71Sopenharmony_ci 1277e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 1278e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world"); 1279e41f4b71Sopenharmony_ci``` 1280e41f4b71Sopenharmony_ci 1281e41f4b71Sopenharmony_ci```ts 1282e41f4b71Sopenharmony_ci// worker.ets 1283e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 1284e41f4b71Sopenharmony_ci 1285e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort; 1286e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => { 1287e41f4b71Sopenharmony_ci console.log("receive main thread message"); 1288e41f4b71Sopenharmony_ci} 1289e41f4b71Sopenharmony_ci``` 1290e41f4b71Sopenharmony_ci 1291e41f4b71Sopenharmony_ci 1292e41f4b71Sopenharmony_ci### onmessageerror<sup>9+</sup> 1293e41f4b71Sopenharmony_ci 1294e41f4b71Sopenharmony_cionmessageerror?: (this: ThreadWorkerGlobalScope, ev: MessageEvents) => void 1295e41f4b71Sopenharmony_ci 1296e41f4b71Sopenharmony_ci回调函数。ThreadWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序,处理程序在Worker线程中执行。其中this指调用者对象本身[ThreadWorkerGlobalScope](#threadworkerglobalscope9),ev类型为[MessageEvents](#messageevents9),表示收到的Worker消息数据。 1297e41f4b71Sopenharmony_ci 1298e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1299e41f4b71Sopenharmony_ci 1300e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1301e41f4b71Sopenharmony_ci 1302e41f4b71Sopenharmony_ci**错误码:** 1303e41f4b71Sopenharmony_ci 1304e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1305e41f4b71Sopenharmony_ci 1306e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1307e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 1308e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Incorrect parameter types. | 1309e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. | 1310e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. | 1311e41f4b71Sopenharmony_ci 1312e41f4b71Sopenharmony_ci**示例:** 1313e41f4b71Sopenharmony_ci 1314e41f4b71Sopenharmony_ci```ts 1315e41f4b71Sopenharmony_ci// main thread 1316e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 1317e41f4b71Sopenharmony_ci 1318e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 1319e41f4b71Sopenharmony_ci``` 1320e41f4b71Sopenharmony_ci 1321e41f4b71Sopenharmony_ci```ts 1322e41f4b71Sopenharmony_ci// worker.ets 1323e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 1324e41f4b71Sopenharmony_ci 1325e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort; 1326e41f4b71Sopenharmony_ciworkerPort.onmessageerror = (err: MessageEvents) => { 1327e41f4b71Sopenharmony_ci console.log("worker.ets onmessageerror"); 1328e41f4b71Sopenharmony_ci} 1329e41f4b71Sopenharmony_ci``` 1330e41f4b71Sopenharmony_ci 1331e41f4b71Sopenharmony_ci 1332e41f4b71Sopenharmony_ci## WorkerEventListener<sup>9+</sup> 1333e41f4b71Sopenharmony_ci 1334e41f4b71Sopenharmony_ci事件监听类。 1335e41f4b71Sopenharmony_ci 1336e41f4b71Sopenharmony_ci### (event: Event)<sup>9+</sup> 1337e41f4b71Sopenharmony_ci 1338e41f4b71Sopenharmony_ci(event: Event): void | Promise<void> 1339e41f4b71Sopenharmony_ci 1340e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1341e41f4b71Sopenharmony_ci 1342e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1343e41f4b71Sopenharmony_ci 1344e41f4b71Sopenharmony_ci**参数:** 1345e41f4b71Sopenharmony_ci 1346e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1347e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | -------------- | 1348e41f4b71Sopenharmony_ci| event | [Event](#event) | 是 | 回调的事件类。 | 1349e41f4b71Sopenharmony_ci 1350e41f4b71Sopenharmony_ci**返回值:** 1351e41f4b71Sopenharmony_ci 1352e41f4b71Sopenharmony_ci| 类型 | 说明 | 1353e41f4b71Sopenharmony_ci| ------------------------------------- | ------------------------------- | 1354e41f4b71Sopenharmony_ci| void \| Promise<void> | 无返回值或者以Promise形式返回。 | 1355e41f4b71Sopenharmony_ci 1356e41f4b71Sopenharmony_ci**错误码:** 1357e41f4b71Sopenharmony_ci 1358e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 1359e41f4b71Sopenharmony_ci 1360e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 | 1361e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | 1362e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 1363e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. | 1364e41f4b71Sopenharmony_ci| 10200005 | The invoked API is not supported in workers. | 1365e41f4b71Sopenharmony_ci 1366e41f4b71Sopenharmony_ci**示例:** 1367e41f4b71Sopenharmony_ci 1368e41f4b71Sopenharmony_ci```ts 1369e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets"); 1370e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 1371e41f4b71Sopenharmony_ci console.log("alert listener callback"); 1372e41f4b71Sopenharmony_ci}) 1373e41f4b71Sopenharmony_ci``` 1374e41f4b71Sopenharmony_ci 1375e41f4b71Sopenharmony_ci 1376e41f4b71Sopenharmony_ci## GlobalScope<sup>9+</sup> 1377e41f4b71Sopenharmony_ci 1378e41f4b71Sopenharmony_ciWorker线程自身的运行环境,GlobalScope类继承[WorkerEventTarget](#workereventtarget9)。 1379e41f4b71Sopenharmony_ci 1380e41f4b71Sopenharmony_ci### 属性 1381e41f4b71Sopenharmony_ci 1382e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 1383e41f4b71Sopenharmony_ci 1384e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1385e41f4b71Sopenharmony_ci 1386e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 1387e41f4b71Sopenharmony_ci| ---- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------- | 1388e41f4b71Sopenharmony_ci| name | string | 是 | 否 | Worker的名字,new Worker时指定。 | 1389e41f4b71Sopenharmony_ci| self | [GlobalScope](#globalscope9) & typeof globalThis | 是 | 否 | GlobalScope本身。 | 1390e41f4b71Sopenharmony_ci 1391e41f4b71Sopenharmony_ci 1392e41f4b71Sopenharmony_ci### onerror<sup>9+</sup> 1393e41f4b71Sopenharmony_ci 1394e41f4b71Sopenharmony_cionerror?: (ev: ErrorEvent) => void 1395e41f4b71Sopenharmony_ci 1396e41f4b71Sopenharmony_ci回调函数。GlobalScope的onerror属性表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在Worker线程中执行。其中回调函数中ev类型为[ErrorEvent](#errorevent),表示收到的异常数据。 1397e41f4b71Sopenharmony_ci 1398e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 1399e41f4b71Sopenharmony_ci 1400e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1401e41f4b71Sopenharmony_ci 1402e41f4b71Sopenharmony_ci**示例:** 1403e41f4b71Sopenharmony_ci 1404e41f4b71Sopenharmony_ci```ts 1405e41f4b71Sopenharmony_ci// main thread 1406e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 1407e41f4b71Sopenharmony_ci 1408e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets") 1409e41f4b71Sopenharmony_ci``` 1410e41f4b71Sopenharmony_ci 1411e41f4b71Sopenharmony_ci```ts 1412e41f4b71Sopenharmony_ci// worker.ets 1413e41f4b71Sopenharmony_ciimport { worker, ErrorEvent } from '@kit.ArkTS'; 1414e41f4b71Sopenharmony_ci 1415e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort 1416e41f4b71Sopenharmony_ciworkerPort.onerror = (err: ErrorEvent) => { 1417e41f4b71Sopenharmony_ci console.log("worker.ets onerror" + err.message) 1418e41f4b71Sopenharmony_ci} 1419e41f4b71Sopenharmony_ci``` 1420e41f4b71Sopenharmony_ci 1421e41f4b71Sopenharmony_ci## MessageEvents<sup>9+</sup> 1422e41f4b71Sopenharmony_ci 1423e41f4b71Sopenharmony_ci消息类,持有Worker线程间传递的数据。 1424e41f4b71Sopenharmony_ci 1425e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 1426e41f4b71Sopenharmony_ci 1427e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1428e41f4b71Sopenharmony_ci 1429e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 1430e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | ------------------ | 1431e41f4b71Sopenharmony_ci| data | any | 是 | 否 | 线程间传递的数据。 | 1432e41f4b71Sopenharmony_ci 1433e41f4b71Sopenharmony_ci## Worker<sup>(deprecated)</sup> 1434e41f4b71Sopenharmony_ci 1435e41f4b71Sopenharmony_ci使用以下方法前,均需先构造Worker实例,Worker类继承[EventTarget](#eventtargetdeprecated)。 1436e41f4b71Sopenharmony_ci 1437e41f4b71Sopenharmony_ci> **说明:**<br/> 1438e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker<sup>9+</sup>](#threadworker9)替代。 1439e41f4b71Sopenharmony_ci 1440e41f4b71Sopenharmony_ci### constructor<sup>(deprecated)</sup> 1441e41f4b71Sopenharmony_ci 1442e41f4b71Sopenharmony_ciconstructor(scriptURL: string, options?: WorkerOptions) 1443e41f4b71Sopenharmony_ci 1444e41f4b71Sopenharmony_ciWorker构造函数。 1445e41f4b71Sopenharmony_ci 1446e41f4b71Sopenharmony_ci> **说明:**<br/> 1447e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.constructor<sup>9+</sup>](#constructor9)替代。 1448e41f4b71Sopenharmony_ci 1449e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1450e41f4b71Sopenharmony_ci 1451e41f4b71Sopenharmony_ci**参数:** 1452e41f4b71Sopenharmony_ci 1453e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1454e41f4b71Sopenharmony_ci| --------- | ------------------------------- | ---- | ------------------------------------------------------------ | 1455e41f4b71Sopenharmony_ci| scriptURL | string | 是 | Worker线程文件的路径,路径规则详细参考[文件路径注意事项](../../arkts-utils/worker-introduction.md#文件路径注意事项)。 | 1456e41f4b71Sopenharmony_ci| options | [WorkerOptions](#workeroptions) | 否 | Worker构造的选项。 | 1457e41f4b71Sopenharmony_ci 1458e41f4b71Sopenharmony_ci**示例:** 1459e41f4b71Sopenharmony_ci 1460e41f4b71Sopenharmony_ci此处以在Stage模型中Ability加载Worker文件为例,使用Library加载Worker线程文件的场景参考[文件路径注意事项](../../arkts-utils/worker-introduction.md#文件路径注意事项)。 1461e41f4b71Sopenharmony_ci 1462e41f4b71Sopenharmony_ci 1463e41f4b71Sopenharmony_ci```ts 1464e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 1465e41f4b71Sopenharmony_ci 1466e41f4b71Sopenharmony_ci// 主要说明以下两种场景: 1467e41f4b71Sopenharmony_ci 1468e41f4b71Sopenharmony_ci// 场景1: worker文件所在路径:"entry/src/main/ets/workers/worker.ets" 1469e41f4b71Sopenharmony_ciconst workerStageModel01 = new worker.ThreadWorker('entry/ets/workers/worker.ets', {name:"first worker in Stage model"}); 1470e41f4b71Sopenharmony_ci 1471e41f4b71Sopenharmony_ci// 场景2: worker文件所在路径:"phone/src/main/ets/ThreadFile/workers/worker.ets" 1472e41f4b71Sopenharmony_ciconst workerStageModel02 = new worker.ThreadWorker('phone/ets/ThreadFile/workers/worker.ets'); 1473e41f4b71Sopenharmony_ci``` 1474e41f4b71Sopenharmony_ci 1475e41f4b71Sopenharmony_ci### postMessage<sup>(deprecated)</sup> 1476e41f4b71Sopenharmony_ci 1477e41f4b71Sopenharmony_cipostMessage(message: Object, transfer: ArrayBuffer[]): void 1478e41f4b71Sopenharmony_ci 1479e41f4b71Sopenharmony_ci宿主线程通过转移对象所有权的方式向Worker线程发送消息。 1480e41f4b71Sopenharmony_ci 1481e41f4b71Sopenharmony_ci> **说明:**<br/> 1482e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.postMessage<sup>9+</sup>](#postmessage9)替代。 1483e41f4b71Sopenharmony_ci 1484e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1485e41f4b71Sopenharmony_ci 1486e41f4b71Sopenharmony_ci**参数:** 1487e41f4b71Sopenharmony_ci 1488e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1489e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ | 1490e41f4b71Sopenharmony_ci| message | Object | 是 | 发送至Worker的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 | 1491e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 是 | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到Worker线程,在宿主线程中将会变为不可用,仅在Worker线程中可用,数组不可传入null。 | 1492e41f4b71Sopenharmony_ci 1493e41f4b71Sopenharmony_ci**示例:** 1494e41f4b71Sopenharmony_ci 1495e41f4b71Sopenharmony_ci```ts 1496e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1497e41f4b71Sopenharmony_ci 1498e41f4b71Sopenharmony_cilet buffer = new ArrayBuffer(8); 1499e41f4b71Sopenharmony_ciworkerInstance.postMessage(buffer, [buffer]); 1500e41f4b71Sopenharmony_ci``` 1501e41f4b71Sopenharmony_ci 1502e41f4b71Sopenharmony_ci### postMessage<sup>(deprecated)</sup> 1503e41f4b71Sopenharmony_ci 1504e41f4b71Sopenharmony_cipostMessage(message: Object, options?: PostMessageOptions): void 1505e41f4b71Sopenharmony_ci 1506e41f4b71Sopenharmony_ci宿主线程通过转移对象所有权或者拷贝数据的方式向Worker线程发送消息。 1507e41f4b71Sopenharmony_ci 1508e41f4b71Sopenharmony_ci> **说明:**<br/> 1509e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.postMessage<sup>9+</sup>](#postmessage9-1)替代。 1510e41f4b71Sopenharmony_ci 1511e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1512e41f4b71Sopenharmony_ci 1513e41f4b71Sopenharmony_ci**参数:** 1514e41f4b71Sopenharmony_ci 1515e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1516e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 1517e41f4b71Sopenharmony_ci| message | Object | 是 | 发送至Worker的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 | 1518e41f4b71Sopenharmony_ci| options | [PostMessageOptions](#postmessageoptions) | 否 | 当填入该参数时,与传入ArrayBuffer[]的作用一致,该数组中对象的所有权会被转移到Worker线程,在宿主线程中将会变为不可用,仅在Worker线程中可用。<br/>若不填入该参数,默认设置为 undefined,通过拷贝数据的方式传输信息到Worker线程。 | 1519e41f4b71Sopenharmony_ci 1520e41f4b71Sopenharmony_ci**示例:** 1521e41f4b71Sopenharmony_ci 1522e41f4b71Sopenharmony_ci```ts 1523e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1524e41f4b71Sopenharmony_ci 1525e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world"); 1526e41f4b71Sopenharmony_ci 1527e41f4b71Sopenharmony_cilet buffer = new ArrayBuffer(8); 1528e41f4b71Sopenharmony_ciworkerInstance.postMessage(buffer, [buffer]); 1529e41f4b71Sopenharmony_ci``` 1530e41f4b71Sopenharmony_ci 1531e41f4b71Sopenharmony_ci 1532e41f4b71Sopenharmony_ci### on<sup>(deprecated)</sup> 1533e41f4b71Sopenharmony_ci 1534e41f4b71Sopenharmony_cion(type: string, listener: EventListener): void 1535e41f4b71Sopenharmony_ci 1536e41f4b71Sopenharmony_ci向Worker添加一个事件监听,该接口与[addEventListener<sup>(deprecated)</sup>](#addeventlistenerdeprecated)接口功能一致。 1537e41f4b71Sopenharmony_ci 1538e41f4b71Sopenharmony_ci> **说明:**<br/> 1539e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.on<sup>9+</sup>](#on9)替代。 1540e41f4b71Sopenharmony_ci 1541e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1542e41f4b71Sopenharmony_ci 1543e41f4b71Sopenharmony_ci**参数:** 1544e41f4b71Sopenharmony_ci 1545e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1546e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | ---------------- | 1547e41f4b71Sopenharmony_ci| type | string | 是 | 监听的事件类型。 | 1548e41f4b71Sopenharmony_ci| listener | [EventListener](#eventlistenerdeprecated) | 是 | 回调事件。 | 1549e41f4b71Sopenharmony_ci 1550e41f4b71Sopenharmony_ci**示例:** 1551e41f4b71Sopenharmony_ci 1552e41f4b71Sopenharmony_ci```ts 1553e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1554e41f4b71Sopenharmony_ciworkerInstance.on("alert", (e)=>{ 1555e41f4b71Sopenharmony_ci console.log("alert listener callback"); 1556e41f4b71Sopenharmony_ci}) 1557e41f4b71Sopenharmony_ci``` 1558e41f4b71Sopenharmony_ci 1559e41f4b71Sopenharmony_ci 1560e41f4b71Sopenharmony_ci### once<sup>(deprecated)</sup> 1561e41f4b71Sopenharmony_ci 1562e41f4b71Sopenharmony_cionce(type: string, listener: EventListener): void 1563e41f4b71Sopenharmony_ci 1564e41f4b71Sopenharmony_ci向Worker添加一个事件监听,事件监听只执行一次便自动删除。 1565e41f4b71Sopenharmony_ci 1566e41f4b71Sopenharmony_ci> **说明:**<br/> 1567e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.once<sup>9+</sup>](#once9)替代。 1568e41f4b71Sopenharmony_ci 1569e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1570e41f4b71Sopenharmony_ci 1571e41f4b71Sopenharmony_ci**参数:** 1572e41f4b71Sopenharmony_ci 1573e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1574e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | ---------------- | 1575e41f4b71Sopenharmony_ci| type | string | 是 | 监听的事件类型。 | 1576e41f4b71Sopenharmony_ci| listener | [EventListener](#eventlistenerdeprecated) | 是 | 回调事件。 | 1577e41f4b71Sopenharmony_ci 1578e41f4b71Sopenharmony_ci**示例:** 1579e41f4b71Sopenharmony_ci 1580e41f4b71Sopenharmony_ci```ts 1581e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1582e41f4b71Sopenharmony_ciworkerInstance.once("alert", (e)=>{ 1583e41f4b71Sopenharmony_ci console.log("alert listener callback"); 1584e41f4b71Sopenharmony_ci}) 1585e41f4b71Sopenharmony_ci``` 1586e41f4b71Sopenharmony_ci 1587e41f4b71Sopenharmony_ci 1588e41f4b71Sopenharmony_ci### off<sup>(deprecated)</sup> 1589e41f4b71Sopenharmony_ci 1590e41f4b71Sopenharmony_cioff(type: string, listener?: EventListener): void 1591e41f4b71Sopenharmony_ci 1592e41f4b71Sopenharmony_ci删除类型为type的事件监听,该接口与[removeEventListener<sup>(deprecated)</sup>](#removeeventlistenerdeprecated)接口功能一致。 1593e41f4b71Sopenharmony_ci 1594e41f4b71Sopenharmony_ci> **说明:**<br/> 1595e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.off<sup>9+</sup>](#off9)替代。 1596e41f4b71Sopenharmony_ci 1597e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1598e41f4b71Sopenharmony_ci 1599e41f4b71Sopenharmony_ci**参数:** 1600e41f4b71Sopenharmony_ci 1601e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1602e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | -------------------- | 1603e41f4b71Sopenharmony_ci| type | string | 是 | 需要删除的事件类型。 | 1604e41f4b71Sopenharmony_ci| listener | [EventListener](#eventlistenerdeprecated) | 否 | 删除监听事件后所执行的回调事件。 | 1605e41f4b71Sopenharmony_ci 1606e41f4b71Sopenharmony_ci**示例:** 1607e41f4b71Sopenharmony_ci 1608e41f4b71Sopenharmony_ci```ts 1609e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1610e41f4b71Sopenharmony_ci//使用on接口、once接口或addEventListener接口创建“alert”事件,使用off接口删除事件。 1611e41f4b71Sopenharmony_ciworkerInstance.off("alert"); 1612e41f4b71Sopenharmony_ci``` 1613e41f4b71Sopenharmony_ci 1614e41f4b71Sopenharmony_ci 1615e41f4b71Sopenharmony_ci### terminate<sup>(deprecated)</sup> 1616e41f4b71Sopenharmony_ci 1617e41f4b71Sopenharmony_citerminate(): void 1618e41f4b71Sopenharmony_ci 1619e41f4b71Sopenharmony_ci销毁Worker线程,终止Worker接收消息。 1620e41f4b71Sopenharmony_ci 1621e41f4b71Sopenharmony_ci> **说明:**<br/> 1622e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.terminate<sup>9+</sup>](#terminate9)替代。 1623e41f4b71Sopenharmony_ci 1624e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1625e41f4b71Sopenharmony_ci 1626e41f4b71Sopenharmony_ci**示例:** 1627e41f4b71Sopenharmony_ci 1628e41f4b71Sopenharmony_ci```ts 1629e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1630e41f4b71Sopenharmony_ciworkerInstance.terminate(); 1631e41f4b71Sopenharmony_ci``` 1632e41f4b71Sopenharmony_ci 1633e41f4b71Sopenharmony_ci 1634e41f4b71Sopenharmony_ci### onexit<sup>(deprecated)</sup> 1635e41f4b71Sopenharmony_ci 1636e41f4b71Sopenharmony_cionexit?: (code: number) => void 1637e41f4b71Sopenharmony_ci 1638e41f4b71Sopenharmony_ci回调函数。表示Worker销毁时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中code类型为number,异常退出为1,正常退出为0。 1639e41f4b71Sopenharmony_ci 1640e41f4b71Sopenharmony_ci> **说明:**<br/> 1641e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.onexit<sup>9+</sup>](#onexit9)替代。 1642e41f4b71Sopenharmony_ci 1643e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1644e41f4b71Sopenharmony_ci 1645e41f4b71Sopenharmony_ci**示例:** 1646e41f4b71Sopenharmony_ci 1647e41f4b71Sopenharmony_ci```ts 1648e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1649e41f4b71Sopenharmony_ciworkerInstance.onexit = (code) => { 1650e41f4b71Sopenharmony_ci console.log("onexit"); 1651e41f4b71Sopenharmony_ci} 1652e41f4b71Sopenharmony_ci 1653e41f4b71Sopenharmony_ci//onexit被执行两种方式: 1654e41f4b71Sopenharmony_ci//main thread: 1655e41f4b71Sopenharmony_ciworkerInstance.terminate(); 1656e41f4b71Sopenharmony_ci 1657e41f4b71Sopenharmony_ci//worker线程: 1658e41f4b71Sopenharmony_ci//parentPort.close() 1659e41f4b71Sopenharmony_ci``` 1660e41f4b71Sopenharmony_ci 1661e41f4b71Sopenharmony_ci 1662e41f4b71Sopenharmony_ci### onerror<sup>(deprecated)</sup> 1663e41f4b71Sopenharmony_ci 1664e41f4b71Sopenharmony_cionerror?: (err: ErrorEvent) => void 1665e41f4b71Sopenharmony_ci 1666e41f4b71Sopenharmony_ci回调函数。表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中err类型为[ErrorEvent](#errorevent),表示收到的异常数据。 1667e41f4b71Sopenharmony_ci 1668e41f4b71Sopenharmony_ci> **说明:**<br/> 1669e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.onerror<sup>9+</sup>](#onerror9)替代。 1670e41f4b71Sopenharmony_ci 1671e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1672e41f4b71Sopenharmony_ci 1673e41f4b71Sopenharmony_ci**示例:** 1674e41f4b71Sopenharmony_ci 1675e41f4b71Sopenharmony_ci```ts 1676e41f4b71Sopenharmony_ciimport { worker, ErrorEvent } from '@kit.ArkTS'; 1677e41f4b71Sopenharmony_ci 1678e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1679e41f4b71Sopenharmony_ciworkerInstance.onerror = (err: ErrorEvent) => { 1680e41f4b71Sopenharmony_ci console.log("onerror" + err.message); 1681e41f4b71Sopenharmony_ci} 1682e41f4b71Sopenharmony_ci``` 1683e41f4b71Sopenharmony_ci 1684e41f4b71Sopenharmony_ci 1685e41f4b71Sopenharmony_ci### onmessage<sup>(deprecated)</sup> 1686e41f4b71Sopenharmony_ci 1687e41f4b71Sopenharmony_cionmessage?: (event: MessageEvent) => void 1688e41f4b71Sopenharmony_ci 1689e41f4b71Sopenharmony_ci回调函数。表示宿主线程接收到来自其创建的Worker通过workerPort.postMessage接口发送的消息时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中event类型为[MessageEvent](#messageeventt),表示收到的Worker消息数据。 1690e41f4b71Sopenharmony_ci 1691e41f4b71Sopenharmony_ci> **说明:**<br/> 1692e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.onmessage<sup>9+</sup>](#onmessage9)替代。 1693e41f4b71Sopenharmony_ci 1694e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1695e41f4b71Sopenharmony_ci 1696e41f4b71Sopenharmony_ci**示例:** 1697e41f4b71Sopenharmony_ci 1698e41f4b71Sopenharmony_ci```ts 1699e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 1700e41f4b71Sopenharmony_ci 1701e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1702e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e): void => { 1703e41f4b71Sopenharmony_ci console.log("onmessage"); 1704e41f4b71Sopenharmony_ci} 1705e41f4b71Sopenharmony_ci``` 1706e41f4b71Sopenharmony_ci 1707e41f4b71Sopenharmony_ci 1708e41f4b71Sopenharmony_ci### onmessageerror<sup>(deprecated)</sup> 1709e41f4b71Sopenharmony_ci 1710e41f4b71Sopenharmony_cionmessageerror?: (event: MessageEvent) => void 1711e41f4b71Sopenharmony_ci 1712e41f4b71Sopenharmony_ci回调函数。表示当Worker对象接收到一条无法被序列化的消息时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中event类型为[MessageEvent](#messageeventt),表示收到的Worker消息数据。 1713e41f4b71Sopenharmony_ci 1714e41f4b71Sopenharmony_ci> **说明:**<br/> 1715e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.onmessageerror<sup>9+</sup>](#onmessageerror9)替代。 1716e41f4b71Sopenharmony_ci 1717e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1718e41f4b71Sopenharmony_ci 1719e41f4b71Sopenharmony_ci**示例:** 1720e41f4b71Sopenharmony_ci 1721e41f4b71Sopenharmony_ci```ts 1722e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 1723e41f4b71Sopenharmony_ci 1724e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1725e41f4b71Sopenharmony_ciworkerInstance.onmessageerror = (err) => { 1726e41f4b71Sopenharmony_ci console.log("onmessageerror"); 1727e41f4b71Sopenharmony_ci} 1728e41f4b71Sopenharmony_ci``` 1729e41f4b71Sopenharmony_ci 1730e41f4b71Sopenharmony_ci 1731e41f4b71Sopenharmony_ci## EventTarget<sup>(deprecated)</sup> 1732e41f4b71Sopenharmony_ci> **说明:**<br/> 1733e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[WorkerEventTarget<sup>9+</sup>](#workereventtarget9)替代。 1734e41f4b71Sopenharmony_ci 1735e41f4b71Sopenharmony_ci### addEventListener<sup>(deprecated)</sup> 1736e41f4b71Sopenharmony_ci 1737e41f4b71Sopenharmony_ciaddEventListener(type: string, listener: EventListener): void 1738e41f4b71Sopenharmony_ci 1739e41f4b71Sopenharmony_ci向Worker添加一个事件监听,该接口与[on<sup>(deprecated)</sup>](#ondeprecated)接口功能一致。 1740e41f4b71Sopenharmony_ci 1741e41f4b71Sopenharmony_ci> **说明:**<br/> 1742e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[addEventListener<sup>9+</sup>](#addeventlistener9)替代。 1743e41f4b71Sopenharmony_ci 1744e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1745e41f4b71Sopenharmony_ci 1746e41f4b71Sopenharmony_ci**参数:** 1747e41f4b71Sopenharmony_ci 1748e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1749e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | ---------------- | 1750e41f4b71Sopenharmony_ci| type | string | 是 | 监听的事件类型。 | 1751e41f4b71Sopenharmony_ci| listener | [EventListener](#eventlistenerdeprecated) | 是 | 回调的事件。 | 1752e41f4b71Sopenharmony_ci 1753e41f4b71Sopenharmony_ci**示例:** 1754e41f4b71Sopenharmony_ci 1755e41f4b71Sopenharmony_ci```ts 1756e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1757e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 1758e41f4b71Sopenharmony_ci console.log("alert listener callback"); 1759e41f4b71Sopenharmony_ci}) 1760e41f4b71Sopenharmony_ci``` 1761e41f4b71Sopenharmony_ci 1762e41f4b71Sopenharmony_ci 1763e41f4b71Sopenharmony_ci### removeEventListener<sup>(deprecated)</sup> 1764e41f4b71Sopenharmony_ci 1765e41f4b71Sopenharmony_ciremoveEventListener(type: string, callback?: EventListener): void 1766e41f4b71Sopenharmony_ci 1767e41f4b71Sopenharmony_ci删除Worker的事件监听,该接口与[off<sup>(deprecated)</sup>](#offdeprecated)接口功能一致。 1768e41f4b71Sopenharmony_ci 1769e41f4b71Sopenharmony_ci> **说明:**<br/> 1770e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[removeEventListener<sup>9+</sup>](#removeeventlistener9)替代。 1771e41f4b71Sopenharmony_ci 1772e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1773e41f4b71Sopenharmony_ci 1774e41f4b71Sopenharmony_ci**参数:** 1775e41f4b71Sopenharmony_ci 1776e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1777e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | ------------------------ | 1778e41f4b71Sopenharmony_ci| type | string | 是 | 需要删除的监听事件类型。 | 1779e41f4b71Sopenharmony_ci| callback | [EventListener](#eventlistenerdeprecated) | 否 | 删除监听事件后所执行的回调事件。 | 1780e41f4b71Sopenharmony_ci 1781e41f4b71Sopenharmony_ci**示例:** 1782e41f4b71Sopenharmony_ci 1783e41f4b71Sopenharmony_ci```ts 1784e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1785e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 1786e41f4b71Sopenharmony_ci console.log("alert listener callback"); 1787e41f4b71Sopenharmony_ci}) 1788e41f4b71Sopenharmony_ciworkerInstance.removeEventListener("alert"); 1789e41f4b71Sopenharmony_ci``` 1790e41f4b71Sopenharmony_ci 1791e41f4b71Sopenharmony_ci 1792e41f4b71Sopenharmony_ci### dispatchEvent<sup>(deprecated)</sup> 1793e41f4b71Sopenharmony_ci 1794e41f4b71Sopenharmony_cidispatchEvent(event: Event): boolean 1795e41f4b71Sopenharmony_ci 1796e41f4b71Sopenharmony_ci分发定义在Worker的事件。 1797e41f4b71Sopenharmony_ci 1798e41f4b71Sopenharmony_ci> **说明:**<br/> 1799e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[dispatchEvent<sup>9+</sup>](#dispatchevent9)替代。 1800e41f4b71Sopenharmony_ci 1801e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1802e41f4b71Sopenharmony_ci 1803e41f4b71Sopenharmony_ci**参数:** 1804e41f4b71Sopenharmony_ci 1805e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1806e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | ---------------- | 1807e41f4b71Sopenharmony_ci| event | [Event](#event) | 是 | 需要分发的事件。 | 1808e41f4b71Sopenharmony_ci 1809e41f4b71Sopenharmony_ci**返回值:** 1810e41f4b71Sopenharmony_ci 1811e41f4b71Sopenharmony_ci| 类型 | 说明 | 1812e41f4b71Sopenharmony_ci| ------- | ------------------------------- | 1813e41f4b71Sopenharmony_ci| boolean | 分发的结果,false表示分发失败。 | 1814e41f4b71Sopenharmony_ci 1815e41f4b71Sopenharmony_ci**示例:** 1816e41f4b71Sopenharmony_ci 1817e41f4b71Sopenharmony_ci```ts 1818e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1819e41f4b71Sopenharmony_ci 1820e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未支持。 1821e41f4b71Sopenharmony_ci``` 1822e41f4b71Sopenharmony_ci 1823e41f4b71Sopenharmony_ci分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下: 1824e41f4b71Sopenharmony_ci 1825e41f4b71Sopenharmony_ci```ts 1826e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1827e41f4b71Sopenharmony_ci 1828e41f4b71Sopenharmony_ci//用法一: 1829e41f4b71Sopenharmony_ciworkerInstance.on("alert_on", (e)=>{ 1830e41f4b71Sopenharmony_ci console.log("alert listener callback"); 1831e41f4b71Sopenharmony_ci}) 1832e41f4b71Sopenharmony_ciworkerInstance.once("alert_once", (e)=>{ 1833e41f4b71Sopenharmony_ci console.log("alert listener callback"); 1834e41f4b71Sopenharmony_ci}) 1835e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert_add", (e)=>{ 1836e41f4b71Sopenharmony_ci console.log("alert listener callback"); 1837e41f4b71Sopenharmony_ci}) 1838e41f4b71Sopenharmony_ci 1839e41f4b71Sopenharmony_ci//once接口创建的事件执行一次便会删除。 1840e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_once", timeStamp:0});//timeStamp暂未支持。 1841e41f4b71Sopenharmony_ci//on接口创建的事件可以一直被分发,不能主动删除。 1842e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0}); 1843e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0}); 1844e41f4b71Sopenharmony_ci//addEventListener接口创建的事件可以一直被分发,不能主动删除。 1845e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0}); 1846e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0}); 1847e41f4b71Sopenharmony_ci 1848e41f4b71Sopenharmony_ci//用法二: 1849e41f4b71Sopenharmony_ci//event类型的type支持自定义,同时存在"message"/"messageerror"/"error"特殊类型,如下所示 1850e41f4b71Sopenharmony_ci//当type = "message",onmessage接口定义的方法同时会执行。 1851e41f4b71Sopenharmony_ci//当type = "messageerror",onmessageerror接口定义的方法同时会执行。 1852e41f4b71Sopenharmony_ci//当type = "error",onerror接口定义的方法同时会执行。 1853e41f4b71Sopenharmony_ci//若调用removeEventListener接口或者off接口取消事件时,能且只能取消使用addEventListener/on/once创建的事件。 1854e41f4b71Sopenharmony_ci 1855e41f4b71Sopenharmony_ciworkerInstance.addEventListener("message", (e)=>{ 1856e41f4b71Sopenharmony_ci console.log("message listener callback"); 1857e41f4b71Sopenharmony_ci}) 1858e41f4b71Sopenharmony_ciworkerInstance.onmessage = function(e) { 1859e41f4b71Sopenharmony_ci console.log("onmessage : message listener callback"); 1860e41f4b71Sopenharmony_ci} 1861e41f4b71Sopenharmony_ci//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。 1862e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"message", timeStamp:0}); 1863e41f4b71Sopenharmony_ci``` 1864e41f4b71Sopenharmony_ci### removeAllListener<sup>(deprecated)</sup> 1865e41f4b71Sopenharmony_ci 1866e41f4b71Sopenharmony_ciremoveAllListener(): void 1867e41f4b71Sopenharmony_ci 1868e41f4b71Sopenharmony_ci删除Worker所有的事件监听。 1869e41f4b71Sopenharmony_ci 1870e41f4b71Sopenharmony_ci> **说明:**<br/> 1871e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[removeAllListener<sup>9+</sup>](#removealllistener9)替代。 1872e41f4b71Sopenharmony_ci 1873e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1874e41f4b71Sopenharmony_ci 1875e41f4b71Sopenharmony_ci**示例:** 1876e41f4b71Sopenharmony_ci 1877e41f4b71Sopenharmony_ci```ts 1878e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1879e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 1880e41f4b71Sopenharmony_ci console.log("alert listener callback"); 1881e41f4b71Sopenharmony_ci}) 1882e41f4b71Sopenharmony_ciworkerInstance.removeAllListener(); 1883e41f4b71Sopenharmony_ci``` 1884e41f4b71Sopenharmony_ci 1885e41f4b71Sopenharmony_ci 1886e41f4b71Sopenharmony_ci## DedicatedWorkerGlobalScope<sup>(deprecated)</sup> 1887e41f4b71Sopenharmony_ci 1888e41f4b71Sopenharmony_ciWorker线程用于与宿主线程通信的类,通过postMessage接口发送消息给宿主线程、close接口销毁Worker线程。DedicatedWorkerGlobalScope类继承[WorkerGlobalScope](#workerglobalscopedeprecated)。 1889e41f4b71Sopenharmony_ci 1890e41f4b71Sopenharmony_ci> **说明:**<br/> 1891e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>](#threadworkerglobalscope9)替代。 1892e41f4b71Sopenharmony_ci 1893e41f4b71Sopenharmony_ci### postMessage<sup>(deprecated)</sup> 1894e41f4b71Sopenharmony_ci 1895e41f4b71Sopenharmony_cipostMessage(messageObject: Object, transfer: Transferable[]): void 1896e41f4b71Sopenharmony_ci 1897e41f4b71Sopenharmony_ciWorker线程通过转移对象所有权的方式向宿主线程发送消息。 1898e41f4b71Sopenharmony_ci 1899e41f4b71Sopenharmony_ci> **说明:**<br/> 1900e41f4b71Sopenharmony_ci> 此接口暂不支持使用,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.postMessage<sup>9+</sup>](#postmessage9-2)替代。 1901e41f4b71Sopenharmony_ci 1902e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1903e41f4b71Sopenharmony_ci 1904e41f4b71Sopenharmony_ci**参数:** 1905e41f4b71Sopenharmony_ci 1906e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1907e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 1908e41f4b71Sopenharmony_ci| messageObject | Object | 是 | 发送至宿主线程的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 | 1909e41f4b71Sopenharmony_ci| transfer| Transferable[] | 是 | 暂不支持该参数类型。 | 1910e41f4b71Sopenharmony_ci 1911e41f4b71Sopenharmony_ci### postMessage<sup>9+</sup> 1912e41f4b71Sopenharmony_ci 1913e41f4b71Sopenharmony_cipostMessage(messageObject: Object, transfer: ArrayBuffer[]): void 1914e41f4b71Sopenharmony_ci 1915e41f4b71Sopenharmony_ciWorker线程通过转移对象所有权的方式向宿主线程发送消息。 1916e41f4b71Sopenharmony_ci 1917e41f4b71Sopenharmony_ci> **说明:**<br/> 1918e41f4b71Sopenharmony_ci> DedicatedWorkerGlobalScope类自API version 9 开始废弃,本接口建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.postMessage<sup>9+</sup>](#postmessage9-2)替代。 1919e41f4b71Sopenharmony_ci 1920e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1921e41f4b71Sopenharmony_ci 1922e41f4b71Sopenharmony_ci**参数:** 1923e41f4b71Sopenharmony_ci 1924e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1925e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ | 1926e41f4b71Sopenharmony_ci| messageObject | Object | 是 | 发送至宿主线程的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 | 1927e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 是 | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到宿主线程,在Worker线程中将会变为不可用,仅在宿主线程中可用,数组不可传入null。 | 1928e41f4b71Sopenharmony_ci 1929e41f4b71Sopenharmony_ci**示例:** 1930e41f4b71Sopenharmony_ci 1931e41f4b71Sopenharmony_ci```ts 1932e41f4b71Sopenharmony_ci// main thread 1933e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 1934e41f4b71Sopenharmony_ci 1935e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 1936e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world"); 1937e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e): void => { 1938e41f4b71Sopenharmony_ci // let data = e.data; 1939e41f4b71Sopenharmony_ci console.log("receive data from worker.ets"); 1940e41f4b71Sopenharmony_ci} 1941e41f4b71Sopenharmony_ci``` 1942e41f4b71Sopenharmony_ci```ts 1943e41f4b71Sopenharmony_ci// worker.ets 1944e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 1945e41f4b71Sopenharmony_ci 1946e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort; 1947e41f4b71Sopenharmony_ciworkerPort.onmessage = (e): void => { 1948e41f4b71Sopenharmony_ci // let data = e.data; 1949e41f4b71Sopenharmony_ci let buffer = new ArrayBuffer(5) 1950e41f4b71Sopenharmony_ci workerPort.postMessage(buffer, [buffer]); 1951e41f4b71Sopenharmony_ci} 1952e41f4b71Sopenharmony_ci``` 1953e41f4b71Sopenharmony_ci 1954e41f4b71Sopenharmony_ci### postMessage<sup>(deprecated)</sup> 1955e41f4b71Sopenharmony_ci 1956e41f4b71Sopenharmony_cipostMessage(messageObject: Object, options?: PostMessageOptions): void 1957e41f4b71Sopenharmony_ci 1958e41f4b71Sopenharmony_ciWorker线程通过转移对象所有权或者拷贝数据的方式向宿主线程发送消息。 1959e41f4b71Sopenharmony_ci 1960e41f4b71Sopenharmony_ci> **说明:**<br/> 1961e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.postMessage<sup>9+</sup>](#postmessage9-3)替代。 1962e41f4b71Sopenharmony_ci 1963e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 1964e41f4b71Sopenharmony_ci 1965e41f4b71Sopenharmony_ci**参数:** 1966e41f4b71Sopenharmony_ci 1967e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 1968e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 1969e41f4b71Sopenharmony_ci| messageObject | Object | 是 | 发送至宿主线程的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 | 1970e41f4b71Sopenharmony_ci| options | [PostMessageOptions](#postmessageoptions) | 否 | 当填入该参数时,与传入ArrayBuffer[]的作用一致,该数组中对象的所有权会被转移到宿主线程,在Worker线程中将会变为不可用,仅在宿主线程中可用。<br/>若不填入该参数,默认设置为 undefined,通过拷贝数据的方式传输信息到宿主线程。 | 1971e41f4b71Sopenharmony_ci 1972e41f4b71Sopenharmony_ci**示例:** 1973e41f4b71Sopenharmony_ci 1974e41f4b71Sopenharmony_ci<!--no_check--> 1975e41f4b71Sopenharmony_ci```ts 1976e41f4b71Sopenharmony_ci// main thread 1977e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 1978e41f4b71Sopenharmony_ci 1979e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("entry/ets/workers/worker.ets"); 1980e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world"); 1981e41f4b71Sopenharmony_ciworkerInstance.onmessage = (): void => { 1982e41f4b71Sopenharmony_ci console.log("receive data from worker.ets"); 1983e41f4b71Sopenharmony_ci} 1984e41f4b71Sopenharmony_ci``` 1985e41f4b71Sopenharmony_ci```ts 1986e41f4b71Sopenharmony_ci// worker.ets 1987e41f4b71Sopenharmony_ciimport { ErrorEvent, MessageEvents, worker } from '@kit.ArkTS'; 1988e41f4b71Sopenharmony_ci 1989e41f4b71Sopenharmony_ciconst parentPort = worker.parentPort; 1990e41f4b71Sopenharmony_ciparentPort.onmessage = (e: MessageEvents) => { 1991e41f4b71Sopenharmony_ci parentPort.postMessage("receive data from main thread"); 1992e41f4b71Sopenharmony_ci} 1993e41f4b71Sopenharmony_ci``` 1994e41f4b71Sopenharmony_ci 1995e41f4b71Sopenharmony_ci### close<sup>(deprecated)</sup> 1996e41f4b71Sopenharmony_ci 1997e41f4b71Sopenharmony_ciclose(): void 1998e41f4b71Sopenharmony_ci 1999e41f4b71Sopenharmony_ci销毁Worker线程,终止Worker接收消息。 2000e41f4b71Sopenharmony_ci 2001e41f4b71Sopenharmony_ci> **说明:**<br/> 2002e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.close<sup>9+</sup>](#close9)替代。 2003e41f4b71Sopenharmony_ci 2004e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2005e41f4b71Sopenharmony_ci 2006e41f4b71Sopenharmony_ci**示例:** 2007e41f4b71Sopenharmony_ci 2008e41f4b71Sopenharmony_ci```ts 2009e41f4b71Sopenharmony_ci// main thread 2010e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 2011e41f4b71Sopenharmony_ci 2012e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 2013e41f4b71Sopenharmony_ci``` 2014e41f4b71Sopenharmony_ci```ts 2015e41f4b71Sopenharmony_ci// worker.ets 2016e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 2017e41f4b71Sopenharmony_ci 2018e41f4b71Sopenharmony_ciconst parentPort = worker.parentPort; 2019e41f4b71Sopenharmony_ciparentPort.onmessage = (e): void => { 2020e41f4b71Sopenharmony_ci parentPort.close() 2021e41f4b71Sopenharmony_ci} 2022e41f4b71Sopenharmony_ci``` 2023e41f4b71Sopenharmony_ci 2024e41f4b71Sopenharmony_ci 2025e41f4b71Sopenharmony_ci### onmessage<sup>(deprecated)</sup> 2026e41f4b71Sopenharmony_ci 2027e41f4b71Sopenharmony_cionmessage?: (this: DedicatedWorkerGlobalScope, ev: MessageEvent) => void 2028e41f4b71Sopenharmony_ci 2029e41f4b71Sopenharmony_ci回调函数,DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主线程通过postMessage接口发送的消息时被调用的事件处理程序,处理程序在Worker线程中执行。其中this指调用者对象本身[DedicatedWorkerGlobalScope](#dedicatedworkerglobalscopedeprecated),ev类型为[MessageEvent](#messageeventt),表示收到的Worker消息数据。 2030e41f4b71Sopenharmony_ci 2031e41f4b71Sopenharmony_ci> **说明:**<br/> 2032e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.onmessage<sup>9+</sup>](#onmessage9-1)替代。 2033e41f4b71Sopenharmony_ci 2034e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2035e41f4b71Sopenharmony_ci 2036e41f4b71Sopenharmony_ci**示例:** 2037e41f4b71Sopenharmony_ci 2038e41f4b71Sopenharmony_ci```ts 2039e41f4b71Sopenharmony_ci// main thread 2040e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 2041e41f4b71Sopenharmony_ci 2042e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 2043e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world"); 2044e41f4b71Sopenharmony_ci``` 2045e41f4b71Sopenharmony_ci```ts 2046e41f4b71Sopenharmony_ci// worker.ets 2047e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 2048e41f4b71Sopenharmony_ci 2049e41f4b71Sopenharmony_ciconst parentPort = worker.parentPort; 2050e41f4b71Sopenharmony_ciparentPort.onmessage = (e): void => { 2051e41f4b71Sopenharmony_ci console.log("receive main thread message"); 2052e41f4b71Sopenharmony_ci} 2053e41f4b71Sopenharmony_ci``` 2054e41f4b71Sopenharmony_ci 2055e41f4b71Sopenharmony_ci 2056e41f4b71Sopenharmony_ci### onmessageerror<sup>(deprecated)</sup> 2057e41f4b71Sopenharmony_ci 2058e41f4b71Sopenharmony_cionmessageerror?: (this: DedicatedWorkerGlobalScope, ev: MessageEvent) => void 2059e41f4b71Sopenharmony_ci 2060e41f4b71Sopenharmony_ciDedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序,处理程序在Worker线程中执行。其中this指调用者对象本身[DedicatedWorkerGlobalScope](#threadworkerglobalscope9),ev类型为[MessageEvent](#dedicatedworkerglobalscopedeprecated),表示收到的Worker消息数据。 2061e41f4b71Sopenharmony_ci 2062e41f4b71Sopenharmony_ci> **说明:**<br/> 2063e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.onmessageerror<sup>9+</sup>](#onmessageerror9-1)替代。 2064e41f4b71Sopenharmony_ci 2065e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2066e41f4b71Sopenharmony_ci 2067e41f4b71Sopenharmony_ci**示例:** 2068e41f4b71Sopenharmony_ci 2069e41f4b71Sopenharmony_ci```ts 2070e41f4b71Sopenharmony_ci// main thread 2071e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 2072e41f4b71Sopenharmony_ci 2073e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 2074e41f4b71Sopenharmony_ci``` 2075e41f4b71Sopenharmony_ci```ts 2076e41f4b71Sopenharmony_ci// worker.ets 2077e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 2078e41f4b71Sopenharmony_ci 2079e41f4b71Sopenharmony_ciconst parentPort = worker.parentPort; 2080e41f4b71Sopenharmony_ciparentPort.onmessageerror = (e) => { 2081e41f4b71Sopenharmony_ci console.log("worker.ets onmessageerror") 2082e41f4b71Sopenharmony_ci} 2083e41f4b71Sopenharmony_ci``` 2084e41f4b71Sopenharmony_ci 2085e41f4b71Sopenharmony_ci 2086e41f4b71Sopenharmony_ci## PostMessageOptions 2087e41f4b71Sopenharmony_ci 2088e41f4b71Sopenharmony_ci明确数据传递过程中需要转移所有权对象的类,传递所有权的对象必须是ArrayBuffer,发送它的上下文中将会变为不可用,仅在接收方可用。 2089e41f4b71Sopenharmony_ci 2090e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 2091e41f4b71Sopenharmony_ci 2092e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2093e41f4b71Sopenharmony_ci 2094e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 2095e41f4b71Sopenharmony_ci| -------- | -------- | ---- | ---- | --------------------------------- | 2096e41f4b71Sopenharmony_ci| transfer | Object[] | 是 | 是 | ArrayBuffer数组,用于传递所有权。该数组中不可传入null。 | 2097e41f4b71Sopenharmony_ci 2098e41f4b71Sopenharmony_ci 2099e41f4b71Sopenharmony_ci## Event 2100e41f4b71Sopenharmony_ci 2101e41f4b71Sopenharmony_ci事件类。 2102e41f4b71Sopenharmony_ci 2103e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。 2104e41f4b71Sopenharmony_ci 2105e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2106e41f4b71Sopenharmony_ci 2107e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 2108e41f4b71Sopenharmony_ci| --------- | ------ | ---- | ---- | -------------------------------------------- | 2109e41f4b71Sopenharmony_ci| type | string | 是 | 否 | 指定事件的类型。 | 2110e41f4b71Sopenharmony_ci| timeStamp | number | 是 | 否 | 事件创建时的时间戳(精度为毫秒),暂未支持。 | 2111e41f4b71Sopenharmony_ci 2112e41f4b71Sopenharmony_ci 2113e41f4b71Sopenharmony_ci## EventListener<sup>(deprecated)</sup> 2114e41f4b71Sopenharmony_ci 2115e41f4b71Sopenharmony_ci事件监听类。 2116e41f4b71Sopenharmony_ci 2117e41f4b71Sopenharmony_ci> **说明:** 2118e41f4b71Sopenharmony_ci> 2119e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[WorkerEventListener<sup>9+</sup>](#workereventlistener9)替代。 2120e41f4b71Sopenharmony_ci 2121e41f4b71Sopenharmony_ci### (evt: Event)<sup>(deprecated)</sup> 2122e41f4b71Sopenharmony_ci 2123e41f4b71Sopenharmony_ci(evt: Event): void | Promise<void> 2124e41f4b71Sopenharmony_ci 2125e41f4b71Sopenharmony_ci> **说明:** 2126e41f4b71Sopenharmony_ci> 2127e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[(event:Event)<sup>9+</sup>](#event-event9)替代。 2128e41f4b71Sopenharmony_ci 2129e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2130e41f4b71Sopenharmony_ci 2131e41f4b71Sopenharmony_ci**参数:** 2132e41f4b71Sopenharmony_ci 2133e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 2134e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | -------------- | 2135e41f4b71Sopenharmony_ci| evt | [Event](#event) | 是 | 回调的事件类。 | 2136e41f4b71Sopenharmony_ci 2137e41f4b71Sopenharmony_ci**返回值:** 2138e41f4b71Sopenharmony_ci 2139e41f4b71Sopenharmony_ci| 类型 | 说明 | 2140e41f4b71Sopenharmony_ci| ------------------------------------- | ------------------------------- | 2141e41f4b71Sopenharmony_ci| void \| Promise<void> | 无返回值或者以Promise形式返回。 | 2142e41f4b71Sopenharmony_ci 2143e41f4b71Sopenharmony_ci**示例:** 2144e41f4b71Sopenharmony_ci 2145e41f4b71Sopenharmony_ci```ts 2146e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets"); 2147e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{ 2148e41f4b71Sopenharmony_ci console.log("alert listener callback"); 2149e41f4b71Sopenharmony_ci}) 2150e41f4b71Sopenharmony_ci``` 2151e41f4b71Sopenharmony_ci 2152e41f4b71Sopenharmony_ci 2153e41f4b71Sopenharmony_ci## ErrorEvent 2154e41f4b71Sopenharmony_ci 2155e41f4b71Sopenharmony_ci错误事件类,用于表示Worker执行过程中出现异常的详细信息,ErrorEvent类继承[Event](#event)。 2156e41f4b71Sopenharmony_ci 2157e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。 2158e41f4b71Sopenharmony_ci 2159e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2160e41f4b71Sopenharmony_ci 2161e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 2162e41f4b71Sopenharmony_ci| -------- | ------ | ---- | ---- | -------------------- | 2163e41f4b71Sopenharmony_ci| message | string | 是 | 否 | 异常发生的错误信息。 | 2164e41f4b71Sopenharmony_ci| filename | string | 是 | 否 | 出现异常所在的文件。 | 2165e41f4b71Sopenharmony_ci| lineno | number | 是 | 否 | 异常所在的行数。 | 2166e41f4b71Sopenharmony_ci| colno | number | 是 | 否 | 异常所在的列数。 | 2167e41f4b71Sopenharmony_ci| error | Object | 是 | 否 | 异常类型。 | 2168e41f4b71Sopenharmony_ci 2169e41f4b71Sopenharmony_ci 2170e41f4b71Sopenharmony_ci## MessageEvent\<T\> 2171e41f4b71Sopenharmony_ci 2172e41f4b71Sopenharmony_ci消息类,持有Worker线程间传递的数据。 2173e41f4b71Sopenharmony_ci 2174e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 2175e41f4b71Sopenharmony_ci 2176e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2177e41f4b71Sopenharmony_ci 2178e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 2179e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | ------------------ | 2180e41f4b71Sopenharmony_ci| data | T | 是 | 否 | 线程间传递的数据。 | 2181e41f4b71Sopenharmony_ci 2182e41f4b71Sopenharmony_ci 2183e41f4b71Sopenharmony_ci## WorkerGlobalScope<sup>(deprecated)</sup> 2184e41f4b71Sopenharmony_ci 2185e41f4b71Sopenharmony_ciWorker线程自身的运行环境,WorkerGlobalScope类继承[EventTarget](#eventtargetdeprecated)。 2186e41f4b71Sopenharmony_ci 2187e41f4b71Sopenharmony_ci> **说明:**<br/> 2188e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[GlobalScope<sup>9+</sup>](#globalscope9)替代。 2189e41f4b71Sopenharmony_ci 2190e41f4b71Sopenharmony_ci### 属性 2191e41f4b71Sopenharmony_ci 2192e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2193e41f4b71Sopenharmony_ci 2194e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 2195e41f4b71Sopenharmony_ci| ---- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------- | 2196e41f4b71Sopenharmony_ci| name | string | 是 | 否 | Worker的名字,new Worker时指定。 | 2197e41f4b71Sopenharmony_ci| self | [WorkerGlobalScope](#workerglobalscopedeprecated) & typeof globalThis | 是 | 否 | WorkerGlobalScope本身。 | 2198e41f4b71Sopenharmony_ci 2199e41f4b71Sopenharmony_ci 2200e41f4b71Sopenharmony_ci### onerror<sup>(deprecated)</sup> 2201e41f4b71Sopenharmony_ci 2202e41f4b71Sopenharmony_cionerror?: (ev: ErrorEvent) => void 2203e41f4b71Sopenharmony_ci 2204e41f4b71Sopenharmony_ciWorkerGlobalScope的onerror属性表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在Worker线程中执行。其中回调函数中ev类型为[ErrorEvent](#errorevent),表示收到的异常数据。 2205e41f4b71Sopenharmony_ci 2206e41f4b71Sopenharmony_ci> **说明:**<br/> 2207e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[GlobalScope<sup>9+</sup>.onerror<sup>9+</sup>](#onerror9-1)替代。 2208e41f4b71Sopenharmony_ci 2209e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang 2210e41f4b71Sopenharmony_ci 2211e41f4b71Sopenharmony_ci**示例:** 2212e41f4b71Sopenharmony_ci 2213e41f4b71Sopenharmony_ci```ts 2214e41f4b71Sopenharmony_ci// main thread 2215e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 2216e41f4b71Sopenharmony_ci 2217e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets") 2218e41f4b71Sopenharmony_ci``` 2219e41f4b71Sopenharmony_ci```ts 2220e41f4b71Sopenharmony_ci// worker.ets 2221e41f4b71Sopenharmony_ciimport { worker, ErrorEvent } from '@kit.ArkTS'; 2222e41f4b71Sopenharmony_ci 2223e41f4b71Sopenharmony_ciconst parentPort = worker.parentPort 2224e41f4b71Sopenharmony_ciparentPort.onerror = (err: ErrorEvent) => { 2225e41f4b71Sopenharmony_ci console.log("worker.ets onerror" + err.message) 2226e41f4b71Sopenharmony_ci} 2227e41f4b71Sopenharmony_ci``` 2228e41f4b71Sopenharmony_ci 2229e41f4b71Sopenharmony_ci 2230e41f4b71Sopenharmony_ci## 其他说明 2231e41f4b71Sopenharmony_ci 2232e41f4b71Sopenharmony_ci### 序列化支持类型 2233e41f4b71Sopenharmony_ci 2234e41f4b71Sopenharmony_ci序列化支持类型包括:除Symbol之外的基础类型、Date、String、RegExp、Array、Map、Set、Object(仅限简单对象,比如通过"{}"或者"new Object"创建,普通对象仅支持传递属性,不支持传递其原型及方法)、ArrayBuffer、TypedArray。 2235e41f4b71Sopenharmony_ci 2236e41f4b71Sopenharmony_ci特例:传递通过自定义class创建出来的object时,不会发生序列化错误,但是自定义class的属性(如Function)无法通过序列化传递。 2237e41f4b71Sopenharmony_ci> **说明:**<br/> 2238e41f4b71Sopenharmony_ci> 以API version 9的FA工程为例。 2239e41f4b71Sopenharmony_ci 2240e41f4b71Sopenharmony_ci```ts 2241e41f4b71Sopenharmony_ci// main thread 2242e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS'; 2243e41f4b71Sopenharmony_ci 2244e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("workers/worker.ets"); 2245e41f4b71Sopenharmony_ciworkerInstance.postMessage("message from main thread to worker"); 2246e41f4b71Sopenharmony_ciworkerInstance.onmessage = (d: MessageEvents): void => { 2247e41f4b71Sopenharmony_ci // 当worker线程传递obj2时,data即为obj2。data没有Init、SetName的方法 2248e41f4b71Sopenharmony_ci let data: string = d.data; 2249e41f4b71Sopenharmony_ci} 2250e41f4b71Sopenharmony_ci``` 2251e41f4b71Sopenharmony_ci```ts 2252e41f4b71Sopenharmony_ci// worker.ets 2253e41f4b71Sopenharmony_ciimport { worker, MessageEvents, ErrorEvent } from '@kit.ArkTS'; 2254e41f4b71Sopenharmony_ci 2255e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort; 2256e41f4b71Sopenharmony_ciclass MyModel { 2257e41f4b71Sopenharmony_ci name = "undefined" 2258e41f4b71Sopenharmony_ci Init() { 2259e41f4b71Sopenharmony_ci this.name = "MyModel" 2260e41f4b71Sopenharmony_ci } 2261e41f4b71Sopenharmony_ci} 2262e41f4b71Sopenharmony_ciworkerPort.onmessage = (d: MessageEvents): void => { 2263e41f4b71Sopenharmony_ci console.log("worker.ets onmessage"); 2264e41f4b71Sopenharmony_ci let data: string = d.data; 2265e41f4b71Sopenharmony_ci let func1 = () => { 2266e41f4b71Sopenharmony_ci console.log("post message is function"); 2267e41f4b71Sopenharmony_ci } 2268e41f4b71Sopenharmony_ci // workerPort.postMessage(func1); 传递func1发生序列化错误 2269e41f4b71Sopenharmony_ci // let obj1: obj | null = null; 2270e41f4b71Sopenharmony_ci // if (obj1) { 2271e41f4b71Sopenharmony_ci // workerPort.postMessage(obj1 as obj); //传递obj1发生序列化错误 2272e41f4b71Sopenharmony_ci // } 2273e41f4b71Sopenharmony_ci let obj2 = new MyModel(); 2274e41f4b71Sopenharmony_ci workerPort.postMessage(obj2); // 传递obj2不会发生序列化错误 2275e41f4b71Sopenharmony_ci} 2276e41f4b71Sopenharmony_ciworkerPort.onmessageerror = () => { 2277e41f4b71Sopenharmony_ci console.log("worker.ets onmessageerror"); 2278e41f4b71Sopenharmony_ci} 2279e41f4b71Sopenharmony_ciworkerPort.onerror = (err: ErrorEvent) => { 2280e41f4b71Sopenharmony_ci console.log("worker.ets onerror" + err.message); 2281e41f4b71Sopenharmony_ci} 2282e41f4b71Sopenharmony_ci``` 2283e41f4b71Sopenharmony_ci 2284e41f4b71Sopenharmony_ci### 内存模型 2285e41f4b71Sopenharmony_ciWorker基于Actor并发模型实现。在Worker的交互流程中,JS主线程可以创建多个Worker子线程,各个Worker线程间相互隔离,并通过序列化传递对象,等到Worker线程完成计算任务,再把结果返回给主线程。 2286e41f4b71Sopenharmony_ci 2287e41f4b71Sopenharmony_ciActor并发模型的交互原理:各个Actor并发地处理主线程任务,每个Actor内部都有一个消息队列及单线程执行模块,消息队列负责接收主线程及其他Actor的请求,单线程执行模块则负责串行地处理请求、向其他Actor发送请求以及创建新的Actor。由于Actor采用的是异步方式,各个Actor之间相互隔离没有数据竞争,因此Actor可以高并发运行。 2288e41f4b71Sopenharmony_ci 2289e41f4b71Sopenharmony_ci## 完整示例 2290e41f4b71Sopenharmony_ci> **说明:**<br/> 2291e41f4b71Sopenharmony_ci> 以API version 9的工程为例。<br> API version 8及之前的版本仅支持FA模型,如需使用,注意更换构造Worker的接口和创建worker线程中与主线程通信的对象的两个方法。 2292e41f4b71Sopenharmony_ci### FA模型 2293e41f4b71Sopenharmony_ci 2294e41f4b71Sopenharmony_ci```ts 2295e41f4b71Sopenharmony_ci// main thread(同级目录为例) 2296e41f4b71Sopenharmony_ciimport { worker, MessageEvents, ErrorEvent } from '@kit.ArkTS'; 2297e41f4b71Sopenharmony_ci 2298e41f4b71Sopenharmony_ci// 主线程中创建Worker对象 2299e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("workers/worker.ets"); 2300e41f4b71Sopenharmony_ci 2301e41f4b71Sopenharmony_ci// 主线程向worker线程传递信息 2302e41f4b71Sopenharmony_ciworkerInstance.postMessage("123"); 2303e41f4b71Sopenharmony_ci 2304e41f4b71Sopenharmony_ci// 主线程接收worker线程信息 2305e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => { 2306e41f4b71Sopenharmony_ci // data:worker线程发送的信息 2307e41f4b71Sopenharmony_ci let data: string = e.data; 2308e41f4b71Sopenharmony_ci console.log("main thread onmessage"); 2309e41f4b71Sopenharmony_ci 2310e41f4b71Sopenharmony_ci // 销毁Worker对象 2311e41f4b71Sopenharmony_ci workerInstance.terminate(); 2312e41f4b71Sopenharmony_ci} 2313e41f4b71Sopenharmony_ci 2314e41f4b71Sopenharmony_ci// 在调用terminate后,执行回调onexit 2315e41f4b71Sopenharmony_ciworkerInstance.onexit = (code) => { 2316e41f4b71Sopenharmony_ci console.log("main thread terminate"); 2317e41f4b71Sopenharmony_ci} 2318e41f4b71Sopenharmony_ci 2319e41f4b71Sopenharmony_ciworkerInstance.onerror = (err: ErrorEvent) => { 2320e41f4b71Sopenharmony_ci console.log("main error message " + err.message); 2321e41f4b71Sopenharmony_ci} 2322e41f4b71Sopenharmony_ci``` 2323e41f4b71Sopenharmony_ci```ts 2324e41f4b71Sopenharmony_ci// worker.ets 2325e41f4b71Sopenharmony_ciimport { worker, MessageEvents, ErrorEvent } from '@kit.ArkTS'; 2326e41f4b71Sopenharmony_ci 2327e41f4b71Sopenharmony_ci// 创建worker线程中与主线程通信的对象 2328e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort 2329e41f4b71Sopenharmony_ci 2330e41f4b71Sopenharmony_ci// worker线程接收主线程信息 2331e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => { 2332e41f4b71Sopenharmony_ci // data:主线程发送的信息 2333e41f4b71Sopenharmony_ci let data: string = e.data; 2334e41f4b71Sopenharmony_ci console.log("worker.ets onmessage"); 2335e41f4b71Sopenharmony_ci 2336e41f4b71Sopenharmony_ci // worker线程向主线程发送信息 2337e41f4b71Sopenharmony_ci workerPort.postMessage("123") 2338e41f4b71Sopenharmony_ci} 2339e41f4b71Sopenharmony_ci 2340e41f4b71Sopenharmony_ci// worker线程发生error的回调 2341e41f4b71Sopenharmony_ciworkerPort.onerror = (err: ErrorEvent) => { 2342e41f4b71Sopenharmony_ci console.log("worker.ets onerror"); 2343e41f4b71Sopenharmony_ci} 2344e41f4b71Sopenharmony_ci``` 2345e41f4b71Sopenharmony_cibuild-profile.json5 配置 : 2346e41f4b71Sopenharmony_ci```json 2347e41f4b71Sopenharmony_ci "buildOption": { 2348e41f4b71Sopenharmony_ci "sourceOption": { 2349e41f4b71Sopenharmony_ci "workers": [ 2350e41f4b71Sopenharmony_ci "./src/main/ets/entryability/workers/worker.ets" 2351e41f4b71Sopenharmony_ci ] 2352e41f4b71Sopenharmony_ci } 2353e41f4b71Sopenharmony_ci } 2354e41f4b71Sopenharmony_ci``` 2355e41f4b71Sopenharmony_ci### Stage模型 2356e41f4b71Sopenharmony_ci```ts 2357e41f4b71Sopenharmony_ci// main thread(以不同目录为例) 2358e41f4b71Sopenharmony_ciimport { worker, MessageEvents, ErrorEvent } from '@kit.ArkTS'; 2359e41f4b71Sopenharmony_ci 2360e41f4b71Sopenharmony_ci// 主线程中创建Worker对象 2361e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/pages/workers/worker.ets"); 2362e41f4b71Sopenharmony_ci 2363e41f4b71Sopenharmony_ci// 主线程向worker线程传递信息 2364e41f4b71Sopenharmony_ciworkerInstance.postMessage("123"); 2365e41f4b71Sopenharmony_ci 2366e41f4b71Sopenharmony_ci// 主线程接收worker线程信息 2367e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => { 2368e41f4b71Sopenharmony_ci // data:worker线程发送的信息 2369e41f4b71Sopenharmony_ci let data: string = e.data; 2370e41f4b71Sopenharmony_ci console.log("main thread onmessage"); 2371e41f4b71Sopenharmony_ci 2372e41f4b71Sopenharmony_ci // 销毁Worker对象 2373e41f4b71Sopenharmony_ci workerInstance.terminate(); 2374e41f4b71Sopenharmony_ci} 2375e41f4b71Sopenharmony_ci// 在调用terminate后,执行onexit 2376e41f4b71Sopenharmony_ciworkerInstance.onexit = (code) => { 2377e41f4b71Sopenharmony_ci console.log("main thread terminate"); 2378e41f4b71Sopenharmony_ci} 2379e41f4b71Sopenharmony_ci 2380e41f4b71Sopenharmony_ciworkerInstance.onerror = (err: ErrorEvent) => { 2381e41f4b71Sopenharmony_ci console.log("main error message " + err.message); 2382e41f4b71Sopenharmony_ci} 2383e41f4b71Sopenharmony_ci``` 2384e41f4b71Sopenharmony_ci```ts 2385e41f4b71Sopenharmony_ci// worker.ets 2386e41f4b71Sopenharmony_ciimport { worker, MessageEvents, ErrorEvent } from '@kit.ArkTS'; 2387e41f4b71Sopenharmony_ci 2388e41f4b71Sopenharmony_ci// 创建worker线程中与主线程通信的对象 2389e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort 2390e41f4b71Sopenharmony_ci 2391e41f4b71Sopenharmony_ci// worker线程接收主线程信息 2392e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => { 2393e41f4b71Sopenharmony_ci // data:主线程发送的信息 2394e41f4b71Sopenharmony_ci let data: string = e.data; 2395e41f4b71Sopenharmony_ci console.log("worker.ets onmessage"); 2396e41f4b71Sopenharmony_ci 2397e41f4b71Sopenharmony_ci // worker线程向主线程发送信息 2398e41f4b71Sopenharmony_ci workerPort.postMessage("123") 2399e41f4b71Sopenharmony_ci} 2400e41f4b71Sopenharmony_ci 2401e41f4b71Sopenharmony_ci// worker线程发生error的回调 2402e41f4b71Sopenharmony_ciworkerPort.onerror = (err: ErrorEvent) => { 2403e41f4b71Sopenharmony_ci console.log("worker.ets onerror" + err.message); 2404e41f4b71Sopenharmony_ci} 2405e41f4b71Sopenharmony_ci``` 2406e41f4b71Sopenharmony_cibuild-profile.json5 配置: 2407e41f4b71Sopenharmony_ci```json 2408e41f4b71Sopenharmony_ci "buildOption": { 2409e41f4b71Sopenharmony_ci "sourceOption": { 2410e41f4b71Sopenharmony_ci "workers": [ 2411e41f4b71Sopenharmony_ci "./src/main/ets/pages/workers/worker.ets" 2412e41f4b71Sopenharmony_ci ] 2413e41f4b71Sopenharmony_ci } 2414e41f4b71Sopenharmony_ci } 2415e41f4b71Sopenharmony_ci``` 2416e41f4b71Sopenharmony_ci<!--no_check--> 2417