鸿蒙语言基础类库:【@ohos.worker (启动一个Worker)】

news2025/2/27 3:02:00

启动一个Worker

说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

Worker是与主线程并行的独立线程。创建Worker的线程称之为宿主线程,Worker自身的线程称之为Worker线程。创建Worker传入的url文件在Worker线程中执行,可以处理耗时操作但不可以直接操作UI。

导入模块

import worker from '@ohos.worker';

属性

系统能力: 以下各项对应的系统能力均为SystemCapability.Utils.Lang。

名称参数类型可读可写说明
parentPort[DedicatedWorkerGlobalScope]worker线程用于与宿主线程通信的对象。

WorkerOptions

Worker构造函数的选项信息,用于为Worker添加其他信息。

系统能力: 以下各项对应的系统能力均为SystemCapability.Utils.Lang。

名称参数类型可读可写说明
type“classic”按照指定方式执行脚本。
namestringWorker的名称。

Worker

使用以下方法前,均需先构造Worker实例,Worker类继承[EventTarget]。

constructor

constructor(scriptURL: string, options?: WorkerOptions)

Worker构造函数。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
scriptURLstringWorker执行脚本的url,路径规范:若DevEco新建工程在pages同级下没有workers目录,需要新建workers目录,将脚本文件放入workers目录。
options[WorkerOptions]Worker构造的选项。

返回值:

类型说明
Worker执行Worker构造函数生成的Worker对象,失败则返回undefined。

示例:

const workerInstance = new worker.Worker("workers/worker.js", {name:"first worker"});

postMessage

postMessage(message: Object, options?: PostMessageOptions): void

向Worker线程发送消息,数据的传输采用结构化克隆算法。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
messageObject发送至Worker的数据。
options[PostMessageOptions]可转移对象是 ArrayBuffer 的实例对象。transferList数组中不可传入null。

示例:

const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.postMessage("hello world");
const workerInstance= new worker.Worker("workers/worker.js");
var buffer = new ArrayBuffer(8);
workerInstance.postMessage(buffer, [buffer]);

on

on(type: string, listener: EventListener): void

向Worker添加一个事件监听。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
typestring监听事件的type。
listener[EventListener]回调的事件。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.on("alert", (e)=>{
    console.log("alert listener callback");
})

once

once(type: string, listener: EventListener): void

向Worker添加一个事件监听,事件监听只执行一次便自动删除。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
typestring监听事件的type。
listener[EventListener]回调的事件。

示例:

const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.once("alert", (e)=>{
    console.log("alert listener callback");
})

off

off(type: string, listener?: EventListener): void

删除Worker的事件监听。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
typestring需要删除事件的type。
listener[EventListener]需要删除的回调的事件。

示例:

const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.off("alert");

terminate

terminate(): void

关闭Worker线程,终止Worker接收消息。

系统能力: SystemCapability.Utils.Lang

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.terminate()

onexit

onexit?: (code: number) => void

Worker对象的onexit属性表示Worker退出时被调用的事件处理程序,处理程序在宿主线程中执行。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
codenumberWorker退出的code。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onexit = function(e) {
    console.log("onexit")
}

onerror

onerror?: (err: ErrorEvent) => void

Worker对象的onerror属性表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在宿主线程中执行。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
err[ErrorEvent]异常数据。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onerror = function(e) {
    console.log("onerror")
}

onmessage

onmessage?: (event: MessageEvent) => void

Worker对象的onmessage属性表示宿主线程接收到来自其创建的Worker通过parentPort.postMessage接口发送的消息时被调用的事件处理程序,处理程序在宿主线程中执行。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
event[MessageEvent]收到的Worker消息数据。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onmessage = function(e) {
    console.log("onerror")
}

onmessageerror

onmessageerror?: (event: MessageEvent) => void

Worker对象的onmessageerror属性表示当Worker对象接收到一条无法被序列化的消息时被调用的事件处理程序,处理程序在宿主线程中执行。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
event[MessageEvent]异常数据。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.onmessageerror= function(e) {
    console.log("onmessageerror")
}

EventTarget

addEventListener

addEventListener(type: string, listener: EventListener): void

向Worker添加一个事件监听。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
typestring监听事件的type。
listener[EventListener]回调的事件。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.addEventListener("alert", (e)=>{
    console.log("alert listener callback");
})

removeEventListener

removeEventListener(type: string, callback?: EventListener): void

删除Worker的事件监听。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
typestring需要删除事件的type。
callback[EventListener]需要删除的回调的事件。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.removeEventListener("alert")

dispatchEvent

dispatchEvent(event: Event): boolean

分发定义在Worker的事件。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
event[Event]需要分发的事件。

返回值:

类型说明
boolean分发的结果,false表示分发失败。

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.dispatchEvent({type:"alert"})

removeAllListener

removeAllListener(): void

删除Worker的所有事件监听。

系统能力: SystemCapability.Utils.Lang

示例:

const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.removeAllListener({type:"alert"})

DedicatedWorkerGlobalScope

Worker线程用于与宿主线程通信的类,通过postMessage接口发送消息给宿主线程、close接口关闭Worker线程,DedicatedWorkerGlobalScope类继承[WorkerGlobalScope]。

postMessage

postMessage(message: Object, options?: PostMessageOptions): void

Worker向宿主线程发送消息。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
messageObject发送至Worker的数据。
options[PostMessageOptions]可转移对象是ArrayBuffer的实例对象。transferList数组中不可传入null。

示例:

// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.postMessage("hello world")
workerInstance.onmessage = function(e) {
    console.log("receive data from worker.js")
}
// worker.js
import worker from '@ohos.worker';
const parentPort = worker.parentPort;
parentPort.onmessage = function(e){
    parentPort.postMessage("receive data from main.js")
}

close

close(): void

关闭Worker线程,终止Worker接收消息。

系统能力: SystemCapability.Utils.Lang

示例:

// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
// worker.js
import worker from '@ohos.worker';
const parentPort = worker.parentPort;
parentPort.onmessage = function(e) {
    parentPort.close()
}

onmessage

onmessage?: (event: MessageEvent) => void

DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主线程通过worker.postMessage接口发送的消息时被调用的事件处理程序,处理程序在Worker线程中执行。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
event[MessageEvent]收到的Worker消息数据。

示例:

// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
workerInstance.postMessage("hello world")
// worker.js
import worker from '@ohos.worker';
const parentPort = worker.parentPort;
parentPort.onmessage = function(e) {
    console.log("receive main.js message")
}

onmessageerror

onmessageerror?: (event: MessageEvent) => void

DedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序,处理程序在Worker线程中执行。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
event[MessageEvent]异常数据。

示例:

// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
// worker.js
import worker from '@ohos.worker';
const parentPort = worker.parentPort;
parentPort.onmessageerror= function(e) {
    console.log("worker.js onmessageerror")
}

PostMessageOptions

明确数据传递过程中需要转移所有权对象的类,传递所有权的对象必须是ArrayBuffer。

系统能力: 以下各项对应的系统能力均为SystemCapability.Utils.Lang。

名称参数类型可读可写说明
transferObject[]ArrayBuffer数组,用于传递所有权。

Event

事件类。

系统能力: 以下各项对应的系统能力均为SystemCapability.Utils.Lang。

名称参数类型可读可写说明
typestring指定事件的type。
timeStampnumber事件创建时的时间戳(精度为毫秒)。

EventListener

事件监听类。

(evt: Event): void | Promise

执行的回调函数。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
evt[Event]回调的事件类。

返回值:

类型说明
voidPromise

示例:

const workerInstance = new worker.Worker("workers/worker.js");
workerInstance.addEventListener("alert", (e)=>{
    console.log("alert listener callback");
})

ErrorEvent

错误事件类,用于表示Worker执行过程中出现异常的详细信息,ErrorEvent类继承[Event]。

系统能力: 以下各项对应的系统能力均为SystemCapability.Utils.Lang。

名称参数类型可读可写说明
messagestring异常发生的错误信息。
filenamestring出现异常所在的文件。
linenonumber异常所在的行数。
colnonumber异常所在的列数。
errorObject异常类型。

MessageEvent

消息类,持有Worker线程间传递的数据。

系统能力: 以下各项对应的系统能力均为SystemCapability.Utils.Lang。

名称参数类型可读可写说明
dataT线程间传递的数据。

WorkerGlobalScope

Worker线程自身的运行环境,WorkerGlobalScope类继承[EventTarget]。

属性

系统能力: 以下各项对应的系统能力均为SystemCapability.Utils.Lang。

在这里插入图片描述

名称参数类型 HarmonyOS与OpenHarmony鸿蒙文档籽料:mau123789是v直接拿可读可写说明
namestringWorker的名字,有new Worker时指定。
self[WorkerGlobalScope] & typeof globalThisWorkerGlobalScope本身。

onerror

onerror?: (ev: ErrorEvent) => void

WorkerGlobalScope的onerror属性表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在Worker线程中执行。

系统能力: SystemCapability.Utils.Lang

参数:

参数名类型必填说明
ev[ErrorEvent]异常数据。

示例:

// main.js
import worker from '@ohos.worker';
const workerInstance = new worker.Worker("workers/worker.js")
// worker.js
import worker from '@ohos.worker';
const parentPort = worker.parentPort
parentPort.onerror = function(e){
    console.log("worker.js onerror")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1918332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十九章 Nest multer 文件上传

上章我们了解了Express multer 文件上传的相关操作 本章将了解Nest中的文件上传。用 multer 包处理 multipart/form-data 类型的请求中的 file 新建个 nest 项目: nest new nest-multer-upload 安装 multer 的 ts 类型的包: npm install -D types/multer1、单文件…

Cesium中实现图层组

图层组 某天领导找我,说业务中可能存在多个影像服务为一个图层组,并且需要同时加载和同时在图层列表中上下移动的需求。 例如一些专题地图,包含所有学校、医院、公交站等图层,而这些图层都是单独发布的。 在 Cesium 中确实存在…

响应式建站公司企业官网源码系统 带源代码以及搭建部署教程

系统概述 响应式建站公司企业官网源码系统是一套集设计、开发、部署于一体的综合性解决方案。它旨在为企业提供一个易于定制、功能强大、适应各种设备屏幕的官方网站平台。 该系统采用先进的技术架构,确保网站的稳定性和性能。它能够与各种后端数据库和服务器环境…

爱秀国际英语公信力怎么样?靠谱吗?

同爱秀国际英语公信力怎么样? ①爱秀国际英语成立于09年,已经有15年的教学积累,专门针对大学生研发的英语口语课程。 ②历年来不仅教学效果显著,在社会上也获得过很多荣誉,在历年的教育大会上也荣获过诸多认可&…

一招杜绝 | 网站被劫持强制植入广告的问题

在我们日常上网过程中,经常会遇到打开一个网页,网页都还没有显示出来,一堆广告就弹出来的现象。或者网页刚刚打开,没几分钟 就会弹出来某游戏广告,注册领豪华坐骑等等的小广告。这些广告不仅仅会让我们对网站的真实性产…

eplan软件许可优化解决方案

Eplan软件介绍 Eplan是一款专业的电气设计软件,用于自动化工程和电气系统的设计与文档化。它由德国的Eplan Software & Service GmbH开发,并在全球范围内广泛应用于工程设计和电气工程领域。 Eplan软件提供了全面的工具和功能,以简化和优…

202-509SF 同轴连接器

型号简介 202-509SF是Southwest Microwave的连接器。这款连接器机身和法兰由不锈钢合金 UNS-30300 制成,螺纹接头则采用 5C360 黄铜合金。接触点采用 BeCu 合金,并经过镀金处理,以提供优异的导电性和耐腐蚀性。绝缘体则由 PTFE 氟碳或 ULTEM …

3.动态规划.基础

3.动态规划.基础 基础理论背包基础理论01背包完全背包多重背包 题目1.斐波那契数2.爬楼梯3.使用最小花费爬楼梯4.不同路径5.不同路径2 基础理论 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题&#xf…

外卖霸王餐系统有什么推荐的

​ 在当今数字化的商业环境中,各种创新的营销策略层出不穷,其中微客云霸王餐系统以其独特的商业模式和营销策略,受到了众多商家的青睐。该系统不仅为商家提供了一个高效的营销工具,还通过一系列的功能和优势,帮助商家…

Qt QChart 曲线图表操作

学习目标:QChart 曲线图表操作 学习内容 QT中的QChart类提供了一个功能强大的图表绘制框架,可以根据需求方便高效地绘制各种类型的图表,主要特点如下: 支持多种常见图表类型,如线图、条形图、饼图、散点图等各种类型。开发者只需要选择合适的图表类和数据即可绘制…

Android APT实战

Android开发中,注解平时我们用的比较多,也许我们会比较好奇,注解的背后是如何工作的,这篇文章帮大家一步步创建一个简单的注解处理器。 简介 APT(Annotation Processing Tool)即注解处理器,在编译的时候可以处理注解然后搞一些事情,也可以在编译时生成一些文件之类的。…

【Linux】常见指令收官权限理解

tar指令 上一篇博客已经介绍了zip/unzip指令,接下来我们来看一下另一个关于压缩和解压的指令:tar指令tar指令:打包/解包,不打开它,直接看内容 关于tar的指令有太多了: tar [-cxtzjvf] 文件与目录 ...…

2.4G芯片开发的遥控玩具方案介绍 东莞酷得

玩具从早期的简单功能,到现如今各种各样的智能操作,发展的速度也是飞速的。随着玩具市场的逐步完善与推进,中国的智能玩具市场也出现了很多远程遥控玩具。遥控玩具也是从最初的有线到现在的无线,从地上跑的到天上飞的,…

jmeter分布式(四)

一、gui jmeter的gui主要用来调试脚本 1、先gui创建脚本 先做一个脚本 演示:如何做混合场景的脚本? 用211的业务比例 ①启动数据库服务 数据库服务:包括mysql、redis mysql端口默认3306 netstat -lntp | grep 3306处于监听状态&#xf…

LeetCode 88.合并两个有序数组 C写法

LeetCode 88.合并两个有序数组 C写法 思路: ​ 由题nums1的长度为mn,则我们不需要开辟新的数组去存储元素。题目要求要有序合并,于是可以判断哪边数更大,将更大的数尾插在nums1中。 ​ 定义三个变量来控制下标,end1控…

Linux--线程ID封装管理原生线程

目录 1.线程的tid(本质是线程属性集合的起始虚拟地址) 1.1pthread库中线程的tid是什么? 1.2理解库 1.3phtread库中做了什么? 1.4线程的tid,和内核中的lwp 1.5线程的局部存储 2.封装管理原生线程库 1.线程的tid…

四川赤橙宏海商务信息咨询有限公司抖音电商服务靠谱吗?

在数字化浪潮席卷全球的今天,电商行业蓬勃发展,各种新兴电商平台层出不穷。其中,抖音电商以其独特的社交属性和庞大的用户基础,迅速崛起为行业新星。四川赤橙宏海商务信息咨询有限公司,作为专注于抖音电商服务的佼佼者…

自动编码器(Autoencoders)

在“深度学习”系列中,我们不会看到如何使用深度学习来解决端到端的复杂问题,就像我们在《A.I. Odyssey》中所做的那样。我们更愿意看看不同的技术,以及一些示例和应用程序。 1、引言 ① 什么是自动编码器(AutoEncoder&#xff…

【js/ts】js/ts高精度加减乘除函数

加法 /*** 高精度加法函数,处理字符串或数字输入,去除尾部多余的零* param {string|number} a - 被加数* param {string|number} b - 加数* returns {string} - 计算结果,去除尾部多余的零* throws {Error} - 如果输入不是有效的数字&#x…

油罐车的罐体结构介绍

油罐车的罐体一般用优质低碳钢板制成,罐内被隔板分为前、后两部分,相互隔离。每个舱内部均配备一道防波板,以加强罐体的稳定性并减缓行驶中油料对罐体的冲击。其车身由车架、车厢等组成,车架是整个油罐车的骨架,承载着…