OpenHarmony实战开发-Worker子线程中解压文件。

news2024/11/27 2:32:59

介绍

本示例介绍在Worker 子线程使用@ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作,解压成功后将解压路径返回主线程,获取解压文件列表。

效果图预览

在这里插入图片描述
使用说明

1.点击解压按钮,解压test.zip文件,显示解压结果。

实现思路

1.在/src/main/ets/workers目录下创建Worker.ets线程文件,绑定Worker对象。

const workerPort: ThreadWorkerGlobalScope = worker.workerPort;

2.在build-profile.json5中进行配置Worker线程文件路径,Worker线程文件才能确保被打包到应用中。

"buildOption": {
  "sourceOption": {
    "workers": [
      "./src/main/ets/workers/Worker.ets"
    ]
  }
}

3.在主线程创建一个Worker线程,通过new worker.ThreadWorker()创建Worker实例,传入Worker.ets的加载路径。

let workerInstance: worker.ThreadWorker = new worker.ThreadWorker('@decompressFile/ets/workers/Worker.ets');

4.主线程使用postMessage()向worker线程发送应用沙箱路径和压缩文件名称。

workerInstance.postMessage({ pathDir: this.pathDir, rawfileZipName: rawfileZipName });

5.在Worker.ets文件中通过调用onmessage()方法接收主线程发送的应用沙箱路径和压缩文件名称。

workerPort.onmessage = (e: MessageEvents): void => {
  logger.info(TAG, `Worker onmessage:${JSON.stringify(e.data)}`);
  let pathDir: string = e.data.pathDir; // 沙箱目录
  let rawfileZipName: string = e.data.rawfileZipName; // 带.zip后缀的压缩文件名称
}

6.使用fs.access判断输出目录是否已经存在,如果不存在使用fs.mkdirSync()创建空目录用于放置解压后的文件。空目录创建成功后使用zlib.decompressFile接口解压压缩文件,输出到空目录中。

fs.access(outFileDir).then((res: boolean) => {
  if (!res) {
    // TODO:知识点:使用fs.mkdirSync创建目录,用于存放解压后的文件。
    fs.mkdirSync(outFileDir);
    logger.info(TAG, 'mkdirSync succeed');
  }
  // TODO:知识点:使用zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作,解压至指定沙箱目录outFileDir。
  // 如果待解压的文件或文件夹在解压后的路径下已经存在,则会直接覆盖同名文件或同名文件夹中的同名文件。
  zlib.decompressFile(`${pathDir}/${rawfileZipName}`, outFileDir, (errData: BusinessError) => {
    if (errData !== null) {
      logger.error(TAG, `decompressFile failed. code is ${errData.code}, message is ${errData.message}`);
    } else {
      logger.info(TAG, `decompressFile succeed. outFileDir is ${outFileDir}`);
      // TODO:知识点:Worker线程向主线程发送信息。
      workerPort.postMessage(outFileDir);
    }
  })
}).catch((err: BusinessError) => {
  logger.error(TAG, `access failed with error message: ${err.message}, error code: ${err.code}`);
});

高性能知识点

  1. 本示例使用了LazyForEach进行数据懒加载,List布局时会根据可视区域按需创建ListItem组件,并在ListItem滑出可视区域外时销毁以降低内存占用。
  2. 本示例使用在Work子线程中使用zlib.decompressFile解压文件,避免阻塞主线程的运行。

工程结构&模块类型

decompressFile                                // har类型
|---/src/main/ets/model                        
|   |---FileListDataSource.ets                // 数据模型层-列表数据模型 
|   |---FileItemModel.ets                     // 数据模型层-列表项数据模型
|---/src/main/ets/view                        
|   |---MainPage.ets                          // 视图层-场景列表页面
|---/src/main/ets/workers                        
|   |---Worker.ets                            // Worker线程

模块依赖

1.本实例依赖common模块来获取日志工具类logger。

如果大家还没有掌握鸿蒙,现在想要在最短的时间里吃透它,我这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

《鸿蒙开发学习手册》:

如何快速入门:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念
2.构建第一个ArkTS应用
3.……

在这里插入图片描述

开发基础知识:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

HarmonyOS APP开发教程案列:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

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

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

相关文章

【JavaSE】你真的了解内部类吗?

前言 本篇会详细讲解内部类的四种形式,让你掌握内部类~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 内部类介绍 实例内部类 定义 调用 静态内部类 定义 调用 匿名内部类 定义和调用1 调用方法2 …

Linux的重要命令(二)+了解Linux目录结构

目录 一.Linux的目录结构 二.查看文件内容命令 1.cat 命令 2.more 命令 3.less 命令 4.head 命令 5.tail 命令 6.拓展 head 和 tail 的其他用法 ​编辑 三.统计文件内容的命令-wc ​编辑 四.检索和过滤文件内容的命令-grep ​编辑 ​编辑 五.压缩命令 gzip 和 bz…

碳课堂|碳关税是什么?企业如何从容应对?

2023年10月1日,欧盟碳边境调节机制(CBAM)法规,即全球首个“碳关税”开始实施。据世界银行研究报告称,如果“碳关税”全面实施,在国际市场上,中国制造可能将面临平均26%的关税,出口量…

【数据结构与算法】之双向链表及其实现!

​ 个人主页:秋风起,再归来~ 数据结构与算法 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 目录 1、双向链表的结构及概念 2、双向链表的实现 2.1 要实现的接口…

Token2049主办方遭遇假门票风波,韩国罗马基金会Charles Lee损失50万美元

加密货币——遍地黄金?还是遍地陷阱? 尽管伊朗空袭以色列导致中东局势愈发紧张,但加密社区对当地市场的热情丝毫没有受到影响,不出意外的话,Token 2049这场全球最受瞩目的加密货币盛会将于4月18至19日在迪拜如期举行&…

【Python基础】—— scipy.spatial.KDTree、matplotlib.pyplot、imageio

scipy.spatial参考博客:Python点云处理——建立KDtree 1 KDtree算法原理 KDtree构建出了一种类似于二叉树的树形数据存储结构,每一层都对应原始数据中相应的维度,以K层为一个循环,因此被称为KDtree。 每一层的左右子树的划分依据…

请把「睡一个好觉」,当成一天里最重要的事来管理

我发现许多人都有这么一种情况:明明知道睡眠很重要,但却总是有意无意地熬夜。 比如: 给自己排了太多的学习和工作量,一不小心就到了凌晨一两点; 总觉得过去的一天什么都没干,宁愿在网上闲逛,也不…

Alpha Zero——强化学习的集大成者

文章目录 题目:A general reinforcement learning algorithm that masters chess, shogi and Go through self-play1.概述2.主要内容2.1 网络部分2.2 蒙特卡洛树搜索(MCTS)3.结论题目:A general reinforcement learning algorithm that masters chess, shogi and Go throug…

AI时代的办公新趋势:Python自动化办公解决方案

当我们谈论AI时代的办公新趋势时,Python自动化办公显然是其中的一个重要方向。Python作为一门灵活强大的编程语言,在办公自动化中发挥着巨大作用。下面我们将深入探讨Python在自动化办公中的应用,并通过中等难度的编程例子来展示Python的威力…

大模型日报|今日必读的10篇大模型论文

大家好,今日必读的大模型论文来啦! 1.谷歌推出新型 Transformer 架构:反馈注意力就是工作记忆 虽然 Transformer 给深度学习带来了革命性的变化,但二次注意复杂性阻碍了其处理无限长输入的能力。 谷歌研究团队提出了一种新型 T…

比亚迪官宣秦L:第五代DM-i技术,续航超2000公里下月见

在大伙儿有入手新能源车需求时,大概率会产生应该选纯电还是混动车型方面的纠结。 那么咱们今天就趁着这个机会来简单聊一聊。 纯电车作为不短时间内电动新能源车终极解决方案,其动力结构也最为简单,主要由一块大容量动力电池、电机及电控部…

mybatis后,将代码生成器生成的代码合并到原有的项目中去

【明白了解: 1)接口只定义方法,(告诉你要做什么) 2)具体的逻辑都写在Impl 实现类里】 3)【不是问题 , idea2023对界面进行了优化,变好看了 】 一、鱼皮操作 1.1拖拽…

JVM结构化体系

目录 目录 1.JVM 简介 1.1. 如何理解 JVM 呢? 1.2. 市场主流 JVM 分析? 1.3. 为什么要学习 JVM? 1.4. 字节码底层是如何执行呢? 如何理解 JIT 呢? 为什么 JVM 中解释执行与编译执行的并存(混合模式&…

全球顶级的低代码开发平台,你知道几个?

什么是低代码开发平台? 低码开发平台是一个应用程序,提供图形用户界面编程,从而以非常快的速度开发代码,减少了传统的编程工作。 这些工具有助于快速开发代码,最大限度地减少手工编码的努力。这些平台不仅有助于编码,而且还能快速安装和部署。 低码开发工具的好处 低代码平…

2024Spring> HNU-计算机系统-实验3-Bomblab-导引/答疑

前言 BombLab一定要花时间完成哦,对于期末卷面的提升和计算机系统的理解都非常重要。 导引 ①文件目录概览 助教下发一个文件包,打开之后是这样的几个文件。 这几个文件解释如下 bomb:可执行文件,无法打开,我们主要…

拥抱企业消费新纪元,胜意科技2024代理人大会圆满落幕

因信赖相聚,为共赢而来。近日,由胜意科技主办的“做好生意,拥抱胜意——2024代理人大会”在武汉成功召开,吸引了全国各地百余家TMC生态合作伙伴齐聚一堂,共同探讨数字化浪潮下的差旅管理实践,激发增长新智慧…

突破编程_前端_SVG(使用 svg-pan-zoom 库进行平移与缩放)

1 svg-pan-zoom 概述 svg-pan-zoom 是一个轻量级、高性能且易于使用的 JavaScript 库,专为增强 SVG 图像的浏览体验而设计。它提供了平移和缩放功能,使用户能够无缝探索大型或复杂的 SVG 图形。这个库允许用户对SVG图像进行交互操作,包括缩放…

Transformer的Decoder的输入输出都是什么

目录 1 疑问:Transformer的Decoder的输入输出都是什么 2 推理时Transformer的Decoder的输入输出 2.1 推理过程中的Decoder输入输出 2.2 整体右移一位 3 训练时Decoder的输入 参考文献: 1 疑问:Transformer的Decoder的输入输出都是什么 …

【Redis 神秘大陆】009 案例实践进阶

九、案例实践&进阶方案 9.1 本地缓存组件选型 使用缓存组件时需要重点关注集群方式、集群、缓存命中率。 需要关注集群组建方式、缓存统计;还需要考虑缓存开发语言对缓存的影响,如对于JAVA开发的缓存需要考虑GC的影响;最后还要特别关注…

CubelMX点灯

工程配置 开发板led引脚图 工程io配置 配置PB5 为输出 配置 PE5 为输出 时钟配置 写测试代码 配置工程,下载运行。 参考链接 STM32入门教程-1.点灯_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1dC41147eL/?spm_id_from333.788&vd_sourcee821a225c7b…