
HarmonyOS API:@ohos.worker (启动一个Worker)
版本:v3.1 Beta
@ohos.worker (启动一个Worker)
更新时间: 2023-02-17 09:19
Worker是与主线程并行的独立线程。创建Worker的线程称之为宿主线程,Worker自身的线程称之为Worker线程。创建Worker传入的url文件在Worker线程中执行,可以处理耗时操作但不可以直接操作UI。
Worker主要作用是为应用程序提供一个多线程的运行环境,可满足应用程序在执行过程中与主线程分离,在后台线程中运行一个脚本操作耗时操作,极大避免类似于计算密集型或高延迟的任务阻塞主线程的运行。由于Worker一旦被创建则不会主动被销毁,若不处于任务状态一直运行,在一定程度上会造成资源的浪费,应及时关闭空闲的Worker。
Worker的上下文对象和主线程的上下文对象是不同的,Worker线程不支持UI操作。
说明
本模块首批接口从API version 7 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
导入模块
属性
系统能力: SystemCapability.Utils.Lang
名称 | 类型 | 可读 | 可写 | 说明 |
workerPort9+ | 是 | 是 | worker线程用于与宿主线程通信的对象。 | |
parentPort(deprecated) | 是 | 是 | worker线程用于与宿主线程通信的对象。 此属性从API version 7开始支持,从API version 9 开始废弃。 建议使用workerPort9+替代。 |
WorkerOptions
Worker构造函数的选项信息,用于为Worker添加其他信息。
系统能力: SystemCapability.Utils.Lang
名称 | 类型 | 可读 | 可写 | 说明 |
type | "classic" | "module" | 是 | 是 | Worker执行脚本的模式类型,默认为classic类型,暂不支持module类型。 |
name | string | 是 | 是 | Worker的名称。 |
shared | boolean | 是 | 是 | 暂不支持共享Worker功能。 |
ThreadWorker9+
使用以下方法前,均需先构造ThreadWorker实例,ThreadWorker类继承WorkerEventTarget。
constructor9+
constructor(scriptURL: string, options?: WorkerOptions)
ThreadWorker构造函数。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
scriptURL | string | 是 | Worker执行脚本的路径。 在FA和Stage模型下,DevEco Studio新建Worker工程路径分别存在以下两种情况: (a) worker脚本所在目录与pages目录同级。 (b) worker脚本所在目录与pages目录不同级。 |
options | 否 | Worker构造的选项。 |
返回值:
类型 | 说明 |
ThreadWorker | 执行ThreadWorker构造函数生成的ThreadWorker对象,失败则返回undefined。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200003 | Worker initialization failure. |
10200007 | The worker file patch is invalid path. |
示例:
同时,需在工程的模块级build-profile.json5文件的buildOption属性中添加配置信息,主要分为下面两种情况:
(1) 目录同级
FA模型:
Stage模型:
(2) 目录不同级
FA模型:
Stage模型:
postMessage9+
postMessage(message: Object, transfer: ArrayBuffer[]): void;
向Worker线程发送数据,数据类型必须是序列化所支持的类型。序列化支持类型见其他说明。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
message | Object | 是 | 发送至Worker的数据。 |
transfer | ArrayBuffer[] | 是 | 可传递 ArrayBuffer 的实例对象,数组中不可传入null。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200006 | Serializing an uncaught exception failed. |
示例:
postMessage9+
postMessage(message: Object, options?: PostMessageOptions): void
向Worker线程发送数据,数据类型必须是序列化所支持的类型。序列化支持类型见其他说明。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
message | Object | 是 | 发送至Worker的数据。 |
options | 否 | 可转移对象是 ArrayBuffer 的实例对象。transferList数组中不可传入null。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200006 | Serializing an uncaught exception failed. |
示例:
on9+
on(type: string, listener: WorkerEventListener): void
向Worker添加一个事件监听,该接口与addEventListener9+接口功能一致。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
type | string | 是 | 监听的事件类型。 |
listener | 是 | 回调的事件。回调事件。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
once9+
once(type: string, listener: WorkerEventListener): void
向Worker添加一个事件监听,事件监听只执行一次便自动删除。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
type | string | 是 | 监听的事件类型。 |
listener | 是 | 回调的事件。回调事件。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
off9+
off(type: string, listener?: WorkerEventListener): void
删除类型为type的事件监听,该接口与removeEventListener9+接口功能一致。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
type | string | 是 | 需要删除的事件类型。 |
listener | 否 | 回调的事件。删除的回调事件。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
terminate9+
terminate(): void
销毁Worker线程,终止Worker接收消息。
系统能力: SystemCapability.Utils.Lang
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
示例:
onexit9+
onexit?: (code: number) => void
Worker对象的onexit属性表示Worker销毁时被调用的事件处理程序,处理程序在宿主线程中执行。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
code | number | 是 | Worker退出的code。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
onerror9+
onerror?: (err: ErrorEvent) => void
Worker对象的onerror属性表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在宿主线程中执行。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
err | 是 | 异常数据。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
onmessage9+
onmessage?: (event: MessageEvents) => void
Worker对象的onmessage属性表示宿主线程接收到来自其创建的Worker通过parentPort.postMessage接口发送的消息时被调用的事件处理程序,处理程序在宿主线程中执行。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
event | 是 | 收到的Worker消息数据。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
onmessageerror9+
onmessageerror?: (event: MessageEvents) => void
Worker对象的onmessageerror属性表示当Worker对象接收到一条无法被序列化的消息时被调用的事件处理程序,处理程序在宿主线程中执行。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
event | 是 | 异常数据。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
addEventListener9+
addEventListener(type: string, listener: WorkerEventListener): void
向Worker添加一个事件监听,该接口与on9+接口功能一致。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
type | string | 是 | 监听的事件类型。 |
listener | 是 | 回调的事件。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
removeEventListener9+
removeEventListener(type: string, callback?: WorkerEventListener): void
删除Worker的事件监听,该接口与off9+接口功能一致。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
type | string | 是 | 需要删除的监听事件类型。 |
callback | 否 | 回调的事件。删除的回调事件。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
示例:
dispatchEvent9+
dispatchEvent(event: Event): boolean
分发定义在Worker的事件。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
event | Event | 是 | 需要分发的事件。 |
返回值:
类型 | 说明 |
boolean | 分发的结果,false表示分发失败。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
示例:
removeAllListener9+
removeAllListener(): void
删除Worker所有的事件监听。
系统能力: SystemCapability.Utils.Lang
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
示例:
WorkerEventTarget9+
addEventListener9+
addEventListener(type: string, listener: WorkerEventListener): void
向Worker添加一个事件监听,该接口与on9+接口功能一致。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
type | string | 是 | 监听的事件类型。 |
listener | 是 | 回调的事件。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
removeEventListener9+
removeEventListener(type: string, callback?: WorkerEventListener): void
删除Worker的事件监听,该接口与off9+接口功能一致。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
type | string | 是 | 需要删除的监听事件类型。 |
callback | 否 | 回调的事件。删除的回调事件。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
示例:
dispatchEvent9+
dispatchEvent(event: Event): boolean
分发定义在Worker的事件。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
event | Event | 是 | 需要分发的事件。 |
返回值:
类型 | 说明 |
boolean | 分发的结果,false表示分发失败。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
示例:
removeAllListener9+
removeAllListener(): void
删除Worker所有的事件监听。
系统能力: SystemCapability.Utils.Lang
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
示例:
ThreadWorkerGlobalScope9+
Worker线程用于与宿主线程通信的类,通过postMessage接口发送消息给宿主线程、close接口销毁Worker线程。ThreadWorkerGlobalScope类继承GlobalScope9+。
postMessage9+
postMessage(messageObject: Object, transfer: ArrayBuffer[]): void;
Worker线程向宿主线程发送消息。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
message | Object | 是 | 发送至宿主线程的数据。 |
transfer | ArrayBuffer[] | 是 | 可传输对象是ArrayBuffer的实例对象,数组中不可传入null。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200006 | Serializing an uncaught exception failed. |
示例:
postMessage9+
postMessage(messageObject: Object, options?: PostMessageOptions): void
Worker线程向宿主线程发送消息。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
message | Object | 是 | 发送至宿主线程的数据。 |
options | 否 | 可转移对象是ArrayBuffer的实例对象。transferList数组中不可传入null。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200006 | Serializing an uncaught exception failed. |
示例:
close9+
close(): void
销毁Worker线程,终止Worker接收消息。
系统能力: SystemCapability.Utils.Lang
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
示例:
onmessage9+
onmessage?: (this: ThreadWorkerGlobalScope, ev: MessageEvents) => void
DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主线程通过postMessage接口发送的消息时被调用的事件处理程序,处理程序在Worker线程中执行。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
this | 是 | 指向调用者对象。 | |
ev | 是 | 收到宿主线程发送的数据。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
onmessageerror9+
onmessageerror?: (this: ThreadWorkerGlobalScope, ev: MessageEvents) => void
DedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序,处理程序在Worker线程中执行。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
this | 是 | 指向调用者对象。 | |
ev | 是 | 异常数据。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
WorkerEventListener9+
(event: Event): void | Promise<void>
事件监听类。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
event | Event | 是 | 回调的事件类。 |
返回值:
类型 | 说明 |
void | Promise<void> | 无返回值或者以Promise形式返回。 |
错误码:
以下错误码的详细介绍请参见语言基础类库错误码。
错误码ID | 错误信息 |
10200004 | Worker instance is not running. |
10200005 | The invoked API is not supported in workers. |
示例:
GlobalScope9+
Worker线程自身的运行环境,GlobalScope类继承WorkerEventTarget。
属性
系统能力: SystemCapability.Utils.Lang
名称 | 类型 | 可读 | 可写 | 说明 |
name | string | 是 | 否 | Worker的名字,new Worker时指定。 |
self | GlobalScope & typeof globalThis | 是 | 否 | GlobalScope本身。 |
onerror9+
onerror?: (ev: ErrorEvent) => void
GlobalScope的onerror属性表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在Worker线程中执行。
系统能力: SystemCapability.Utils.Lang
参数:
参数名 | 类型 | 必填 | 说明 |
ev | 是 | 异常数据。 |
示例:
