Worker 进行多线程任务开发
概念介绍
- 在 OpenHarmony 中,UI 线程负责处理 UI 事件和用户交互,而 Worker 线程用于处理耗时操作,以提高应用程序的响应速度和用户体验。
- Worker 线程是与主线程并行的独立线程,通常用于执行后台任务。需要注意的是,Worker 线程中不能直接修改 UI 元素,UI 更新必须在 UI 线程中进行。
API 接口
- 文章介绍了
@ohos.worker模块,该模块提供了创建 Worker 线程的构造函数接口,并为 UI 线程和 Worker 线程提供了线程间通信的接口。 - 详细 API 能力信息可以参考官方文档。
宿主线程与 Worker 线程的通信
- 宿主线程通过
postMessage接口向 Worker 线程发送消息,并通过onmessage事件监听接口处理从 Worker 线程接收到的消息。 - Worker 线程通过
postMessage接口向宿主线程发送消息,并通过onmessage事件监听接口处理从宿主线程接收到的消息。
线程的关闭和销毁
- Worker 线程的生命周期通常跟随应用,应用退出时释放 Worker 资源。
- 可以通过
worker.terminate()在宿主线程中主动销毁 Worker 线程,或者通过workerPort.close()在 Worker 线程中主动销毁。
开发步骤
- 使用 DevEco Studio 创建 Worker 文件,并在
build-profile.json5中添加配置。 - 在宿主线程中创建 Worker 实例,并通过
sendMessage发送消息,通过onmessage监听接收消息。 - 在 Worker 线程中,通过
ThreadWorkerGlobalScope实例的postMessage和onmessage接口与宿主线程通信。
build-profile.json5



注意事项
- Worker 线程不可以直接操作 UI,需要通过其他方式(如 AppStorage)进行传值。
- 及时销毁不再使用的 Worker 线程,避免资源浪费。
参考资料
Worker 进行多线程任务开发的更多相关文章
- Web Worker javascript多线程编程(一)
什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验. 一般来说Javascript ...
- Web Worker javascript多线程编程(二)
Web Worker javascript多线程编程(一)中提到有两种Web Worker:专用线程dedicated web worker,以及共享线程shared web worker.不过主要讲 ...
- 【转】Web Worker javascript多线程编程(一)
原文:https://www.cnblogs.com/peakleo/p/6218823.html -------------------------------------------------- ...
- 深入理解javascript异步编程障眼法&&h5 web worker实现多线程
0.从一道题说起 var t = true; setTimeout(function(){ t = false; }, 1000); while(t){ } alert('end'); 1 2 3 4 ...
- Java多线程学习开发笔记
线程有有序性和可见性 多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现. 在多个线程之间共享类的一个对象,这个对象是被创建在主内存(堆内存)中,每个线程都有自己的工作内存(线 ...
- iOS多线程
iOS开发Demo(示例程序)源代码
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址(2013年12月29日更新版) iOS程序源代码下载链接:01.大任务.zip22 ...
- php多线程thread开发与应用的例子
Php多线程的使用,首先需要PHP5.3以上版本,并安装pthreads PHP扩展,可以使PHP真正的支持多线程,扩展如何安装请自行百度 PHP扩展下载:https://github.com/kra ...
- 【C#多线程】C#多线程 Thread 开发基础
引用 using System; using System.Threading; 多线程代码 Thread mainthread = new Thread(ExecuteThread); mainth ...
- JS利用HTML5的Web Worker实现多线程
需求:有一个长时间的斐波拉契的计算希望放在分线程中计算,计算的得到结果后再返回给主线程展示,再计算的时候不冻结页面 var number = 55;//传入分线程的参数 var worker = ne ...
- 推荐一个PHP扩展 来真正实现PHP多线程的开发
PHP扩展下载:https://github.com/krakjoe/pthreadsPHP手册文档:http://php.net/manual/zh/book.pthreads.php <?p ...
随机推荐
- RabbitMQ 快速复习
目录 RabbitMQ学习笔记 1.消息队列概述 1.1 为什么学习消息队列 1.2 什么是消息中间件 1.3 消息队列应用场景 1.3.1 异步处理 1.3.2 解耦服务 1.3.3 流量削峰 1. ...
- [学习笔记] CentOS + .Net后端常用的中间件工具安装
Redis 5.0+ 官方文档:https://redis.io/download/#redis-downloads sudo yum install redis RabbitMQ 3.7.11+ 官 ...
- gitee github 左侧栏树形显示插件 Octotree codetree 浏览器插件
起因 看到一位仁兄用gitee做仓库 https://gitee.com/zhengqingya/java-developer-document 然后左侧栏挺方便(抖音视频) 下载 chrome扩展市 ...
- 单词本z launch = to throw 相关词根 lanc ject jac jet bol bl bal mit miss cast
launch = to throw 词根 launc = lanc = to throw 表示 to throw 的词根有三组 拉丁语的lanc/launc,sip 拉丁语的ject, jac(jet ...
- vscode 对js文件不格式化的修正方案 settings.json
修正1 "javascript.format.enable": true, // 这里false 改true 修正2 注释掉这个地方 // "[javascript]&q ...
- vscode git冲突 1. git stash 2. 更新代码 3. git stash pop 4.提交代码
vscode git冲突 1. git stash 2. 更新代码 3. git stash pop 4.提交代码
- SQL注入详细讲解概括—盲注
SQL注入详细讲解概括-盲注 1.盲注简单理解 2.盲注必学函数 3.布尔盲注 4.时间盲注 一.盲注简单理解 What is 盲注? It is 在服务器没有错误回显的时候完成的注入攻击 数据库把报 ...
- 什么会导致JAVA应用程序的CPU使用率飙升
问题 无限循环的while会导致CPU使用率飙升吗? 经常使用Young GC会导致CPU占用率飙升吗? 具有大量线程的应用程序的CPU使用率是否较高? CPU使用率高的应用程序的线程数是多少? 处于 ...
- vue基础知识和原理(一)
1. vue基础知识和原理 1.1 初识Vue 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象 demo容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法 demo容器 ...
- 【Leetcode】53. 最大子数组和
题目(链接) 给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 子数组是数组中的一个连续部分. 示例 1: 输入:nums = [-2,1,-3, ...