首页 > 其他分享 >Worker 进行多线程任务开发

Worker 进行多线程任务开发

时间:2024-04-01 20:46:43浏览次数:24  
标签:宿主 Worker 接口 任务 线程 onmessage UI 多线程

概念介绍

  • 在 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实例的postMessageonmessage接口与宿主线程通信。
build-profile.json5 主线程接收和发送消息: worker 线程中通过 onmessage 接收主线程发过来的消息。 通过 postMessage 向主线程发送消息。

注意事项

  • Worker 线程不可以直接操作 UI,需要通过其他方式(如 AppStorage)进行传值。
  • 及时销毁不再使用的 Worker 线程,避免资源浪费。
 

参考资料

使用 Worker 进行线程间通信

标签:宿主,Worker,接口,任务,线程,onmessage,UI,多线程
From: https://www.cnblogs.com/androidsuperman/p/18109325

相关文章

  • TaskPool 和 Worker 的对比
    作用:TaskPool(任务池)和Worker都为应用程序提供多线程运行环境,用于处理耗时的计算任务或其他密集型任务,避免阻塞主线程,提高系统性能。 实现特点对比:内存模型:TaskPool和Worker都提供线程间隔离,内存不共享。参数传递机制:两者都采用结构化克隆算法进行序列化、反序列化,......
  • 这篇教你如何使用python自动化图形界面任务
    这篇教你如何使用python自动化图形界面任务PyAutoGUI是什么?PyAutoGUI是一个用于自动化任务和图形用户界面操作的Python库。它可以模拟鼠标移动、点击、键盘输入等操作,帮助用户实现自动化任务。优点:跨平台性:PyAutoGUI可以在Windows、macOS和Linux等多个平台......
  • Django+nginx+uwsgi +apscheduler任务重复执行问题
    Django+nginx+uwsgi+apscheduler任务重复执行问题1、问题描述通过Django+nginx+uwsgi部署项目,前端页面通过API接口动态添加、管理apscheduler定时任务。由于uwsgi启动多个worker,导致每个worker执行一次定时任务,导致任务的重复执行。如下图,因为uwsgi.ini文件......
  • 多线程编程相关理论
    Happens-Before原则:如果操作AHappens-Before操作B,那么操作A的结果对操作B是可见的,并且操作A在操作B之前执行。这确保了当一个线程修改了某个变量的值,其他线程能够看到这个修改后的值,从而避免了数据不一致的问题。Happens-Before的关键规则:程序次序规则:在一个线程内,按照控制流顺......
  • SAP BW 增量抽取报错任务 ODQR_***** 已失败
    修复处理链发现一直报错,报错信息如下: 怀疑是源端的增量出现问题:打开源端,TCODE:ODQMON 选择,双击进入 找到对应的DTP,双击进入  找到增量出错的那条,点击,尝试重新抽取增量,如果不行,看后台任务是否还在运行,如果报错任务直接删掉。然后更新请求状态,变成了红叉,直接运行DTP......
  • CSci 4061多线程图像匹配服务器
    CSci4061:操作系统简介,2024年春季项目#3:多线程图像匹配服务器中间提交截止时间:2023年4月4日下午11:59(CDT)最终提交截止时间:下午11:59(CDT),4。12,20231.背景这个实验室的目的是使用C语言中的POSIX线程(pthreads)来学习线程编程和同步方法。在这个项目中,我们将使用多线程来提高服务器的......
  • C#中的多线程编程
    多线程编程在C#和WPF日常开发中非常常见,特别是在需要处理并发任务或者提高程序性能的场景下。以下是关于多线程编程的知识点,以及可能会在面试中被问到的一些问题和答案:多线程编程的知识点:线程和进程:线程是程序执行流的最小单元,多个线程可以共享同一个进程的资源。在C#......
  • 权限提升-Linux系统权限提升篇&Vulnhub&PATH变量&NFS服务&Cron任务&配合SUID
    知识点1、Web或普通用户到Linux-服务安全配合SUID-NFS2、普通用户到Linux-环境变量配合SUID-$PATH3、Web或普通用户到Linux-计划任务权限不当-Cron章节点:1、Web权限提升及转移2、系统权限提升及转移3、宿主权限提升及转移4、域控权限提升及转移基础点0、为什么我......
  • Java多线程三种实现方式
    一、继承Thread方法publicclassMyThreadextendsThread{@Overridepublicvoidrun(){for(inti=0;i<10;i++){System.out.println(getName()+"输出内容");}}publicstaticvoidmain(String[]args){......
  • 详解 Java多线程带来的的风险-线程安全
    目录一、什么是线程安全? 二、线程不安全的原因1、线程调度是随机的2、修改共享数据:多个线程修改同⼀个变量3、原⼦性 ​编辑(1)什么是原⼦性(2)⼀条java语句不⼀定是原⼦的,也不⼀定只是⼀条指令 (3)不保证原⼦性会给多线程带来什么问题(4)可⻅性:可⻅性指,⼀个线程对共......