HarmonyOS 开发-Worker子线程中解压文件
介绍
本示例介绍在Worker
子线程使用@ohos.zlib
提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作,解压成功后将解压路径返回主线程,获取解压文件列表。
效果图预览
使用说明
- 点击解压按钮,解压test.zip文件,显示解压结果。
实现思路
- 在/src/main/ets/workers目录下创建Worker.ets线程文件,绑定Worker对象。
const workerPort: ThreadWorkerGlobalScope = worker.workerPort;
- 在build-profile.json5中进行配置Worker线程文件路径,Worker线程文件才能确保被打包到应用中。
"buildOption": {
"sourceOption": {
"workers": [
"./src/main/ets/workers/Worker.ets"
]
}
}
- 在主线程创建一个Worker线程,通过new worker.ThreadWorker()创建Worker实例,传入Worker.ets的加载路径。
let workerInstance: worker.ThreadWorker = new worker.ThreadWorker('@decompressFile/ets/workers/Worker.ets');
- 主线程使用postMessage()向worker线程发送应用沙箱路径和压缩文件名称。
workerInstance.postMessage({ pathDir: this.pathDir, rawfileZipName: rawfileZipName });
- 在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后缀的压缩文件名称
}
- 使用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}`);
});
高性能知识点
- 本示例使用了LazyForEach进行数据懒加载,List布局时会根据可视区域按需创建ListItem组件,并在ListItem滑出可视区域外时销毁以降低内存占用。
- 本示例使用在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线程
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
《鸿蒙开发学习手册》:
如何快速入门:https://qr21.cn/FV7h05
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!






