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

启动一个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")
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

棋牌室计时收费系统怎么接电源线 佳易王棋牌计时灯控版管理系统教程

前言: 棋牌室计时收费系统怎么接电源线 佳易王棋牌计时灯控版管理系统教程 以下软件操作教程以,佳易王棋牌计时计费管理系统软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件操作教程 1、软件在点击计时按钮…

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

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

怎样在 C 语言中进行结构体的内存布局控制?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会! 📙C 语言百万年薪修炼课程 【https://dwz.mosong.cc/cyyjc】通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代&…

Doris安装部署

Doris安装部署 1、 MPP概念Doris简要介绍 1、 MPP概念 MPP (Massively Parallel Processing),即大规模并行处理,在数据库非共享集群中,每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点…

免费录制视频的软件,推荐3款,总有一款适合你!

在数字化时代,视频录制与分享已成为日常生活和工作中的重要组成部分。无论是录制游戏过程、教程讲解还是网络会议,一款好用的录制视频软件能够帮助我们更便捷地实现这个目标。然而,许多录制视频的软件都是收费的,这对于很多人来说…

定时器TIM配置微妙延时函数

定时器TIM配置微妙延时函数 文章目录 定时器TIM配置微妙延时函数开胃小菜(BOOT0、BOOT1)Boot0Boot1(如果有) 三种定时器高级控制定时器(TIM1,TIM8)通用定时器(TIM2, TIM3, TIM4, TIM…

dxf数据结构

DXF(Drawing Exchange Format,绘图交换格式)是Autodesk公司开发的一种CAD(计算机辅助设计)文件格式,用于实现AutoCAD与其他软件之间的CAD数据交换。DXF格式文件是一种开放的矢量数据格式,具有多…

怎么办?我的C盘又爆红了!别慌!博主手把手带你管理你的C盘空间~

怎么办?我的C盘又爆红了!别慌!博主手把手带你管理你的C盘空间~ 文章目录 怎么办?我的C盘又爆红了!别慌!博主手把手带你管理你的C盘空间~0. 在开始清理之前1. 推荐执行的操作1.1 清理系统缓存文件1.2 磁盘清…

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

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

maven私有镜像仓库nexus部署使用

maven私有镜像仓库nexus部署使用 1、Nexus部署 #查找镜像 docker search sonatype/nexus3 #拉取镜像 docker pull sonatype/nexus3 #持久化目录 mkdir -p /data/nexus/data chmod 777 -R /data/nexus/data #启动服务 docker run -d --name nexus3 -p 8081:8081 --restart alw…

创建React 项目的几种方式

①.react自带脚手架 使用步骤: 1、下载 npm i create-react-app -g 2、创建项目命令: create-react-app 项目名称 ②.Vite构建工具创建react步骤:(推荐) 方法一: 1、yarn create vite 2、后续根据提示步…

新书速览|Vue.js 3.x+Express全栈开发:从0到1打造商城项目

《Vue.js 3.xExpress全栈开发:从0到1打造商城项目》 1 本书内容 《Vue.js 3.xExpress全栈开发 : 从0到1打造商城项目》是一本详尽的全栈开发教程,旨在通过Vue.js和Express框架引导读者从零开始构建一个完整的电商项目。内容覆盖电商项目的基本结构&…

OpenCV 看这一篇就够了 持续更新中

目录 一、基础操作 1. openCV界面 2. 图像的基础操作 2.1 图像的输入与输出 2.2 图片的数组的本质 2.3 修改像素尺寸 3. 视频的基础操作 3.1 视频的本质 3.2 视频的输入与输出 3.2.1 视频文件读取 3.2.2 摄像头捕获 3.2.3 视频保存 4. 回调函数 二、界面控件 1.…

家具回收靠谱的平台

在如今的社会,随着生活水平的提高和消费观念的转变,家具的更新换代日益频繁。然而,如何妥善处理旧家具成为了许多人面临的难题。幸运的是,市场上涌现出了众多家具回收平台,为我们解决了这一烦恼。在众多的平台中&#…

微信开发授权登录梳理总结

授权登录流程对比 微信公众号/网页 微信文档地址:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 流程图如下: 特殊说明: 步骤1拼接的微信地址是:https://open.weixin.qq…

Monaco 多行提示的实现方式

AI 代码助手最近太火爆,国内有模型厂商都有代码助手,代码助手是个比较典型的 AI 应用,主要看前端,后端的模型都差不多,国内外都有专门的代码模型。现在都是集中在 VSCode 和 Idea的插件,本文通过 Monaco 实…

O2OA平台所提供的开箱即用的内置应用

本篇介绍一下O2OA平台所提供的开箱即用的内置应用 作为协同办公领域的快速开发平台,为了让企业能够快速搭建企业级的协同应用,O2OA在设计之初就内置了一些通用的、实用的企业办公应用,如考勤管理,日程管理,会议管理等…

redis相关知识记录

redis基本数据类型 Redis⽀持五种主要数据结构:字符串(Strings)、列表(Lists)、哈希表(Hashes)、集合(Sets)和有序集合(Sorted Sets)。这些数据结…

UNI_App平台调试指南 debug(十五)

App平台调试指南 debug 常规开发里,在 HBuilderX 的运行菜单里运行 App,手机端的错误或 console.log 日志信息会直接打印到控制台。 如果需要更多功能,比如审查元素、打断点 debug,则需要启动调试模式。自 HBuilderX 2.0.3+ 版本起开始支持 App 端的调试。 #打开调试窗口…

浅谈三车平台车型对比功能实用奖-竞品分析

目录: 一、项目背景 二、竞品概述 三、竞品目标功能对比 3.1、车型对比入口位置 3.2、车型对比首页 3.3、添加/删除车型功能 3.4、选择车型后功能对比 3.5、配置对比的功能 四、总结 一、项目背景 在汽车购买过程中,消费者经常面临着选择困难&…