网站建设项目管理基本要求,网站空间到期影响,在线商城网站模板,招标采购平台介绍
本示例介绍在Worker 子线程使用ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作#xff0c;解压成功后将解压路径返回主线程#xff0c;获取解压文件列表。
效果图预览 使用说明
1.点击解压按钮#xff0c;解压test.zip文件#xff0c…介绍
本示例介绍在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});
});高性能知识点
本示例使用了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线程模块依赖
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.0PDFhttps://docs.qq.com/doc/DZVVBYlhuRkZQZlB3 HarmonyOS APP开发教程案列https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3