HarmonyOS NEXT应用开发之多文件下载监听案例

news/2024/7/21 9:01:36 标签: harmonyos, 华为, 鸿蒙开发, 前端, 移动开发

介绍

多文件下载监听在应用开发中是一个非常常见的需求。本示例将介绍如何使用request上传下载模块实现多文件下载监听,如监听每个文件下载任务的进度,任务暂停,下载完成等下载情况。每个应用最多支持创建10个未完成的任务,相关规格说明请参考request.agent.create。

效果图预览

使用说明

  1. 连接网络。进入页面,点击“全部开始”,启动所有文件的下载任务。点击“全部暂停”,暂停所有文件下载任务。再次点击“全部开始”,可重新启动未完成的下载任务。下载完成的文件会保存在应用缓存路径下。如出现下载失败,一般是网络不稳定,点击“全部开始”即可重新下载。

实现思路

  1. 配置下载参数。一个下载任务需要配置对应一套下载参数request.agent.Config。本例中使用downloadConfig方法简单配置了下载文件的url,实际业务中请按实际情况按需配置。源码参考MultipleFilesDownload.ets。
let config: request.agent.Config = {
  action: request.agent.Action.DOWNLOAD, // 配置任务选项,这里配置为下载任务
  url: downloadUrl, // 配置下载任务url
  overwrite: true, // 下载过程中路径已存在时的解决方案选择。true表示覆盖已存在的文件
  method: 'GET', // HTTP标准方法。下载时,使用GET或POST。
  saveas: './', // 这里'./'表示下载至应用当前缓存路径下。
  mode: request.agent.Mode.BACKGROUND, // 任务模式设置后台任务。
  gauge: true // 后台任务的过程进度通知策略,仅应用于后台任务。true表示发出每个进度已完成或失败的通知。
};
  1. 创建多个文件下载监听实例。单个文件下载监听只需要配置下载参数,创建下载任务,注册下载任务相关监听,启动下载任务即可实现。而要实现多文件下载监听,需要每个下载任务注册独立的下载监听回调。本例通过封装自定义组件FileDownloadItem,在每个FileDownloadItem中创建各自的下载任务和监听回调,从而实现多文件下载监听。源码参考MultipleFilesDownload.ets。
ForEach(this.downloadConfigArray, (item: request.agent.Config) => {
  ListItem() {
    // 创建文件下载监听实例
    FileDownloadItem({
      downloadConfig: item, // 文件下载配置
      isStartAllDownload: this.isStartAllDownload, // 是否全部开始下载
      downloadCount: this.downloadCount // 待下载任务数量
    })
  }
}, (item: request.agent.Config) => JSON.stringify(item))
  1. 创建下载任务,并注册下载任务相关监听。本例在每个FileDownloadItem中使用request.agent.create创建下载任务。然后在下载任务创建成功后,注册各自下载任务相关监听。本例中注册了下载任务完成回调,下载任务失败回调,下载进度更新回调,暂停任务回调,重新启动任务回调。源码参考FileDownloadItem.ets。
request.agent.create(context, this.downloadConfig).then((task: request.agent.Task) => {
  // 注册下载任务相关回调
  task.on('completed', this.completedCallback); // 下载任务完成回调
  task.on('failed', this.failedCallback); // 下载任务失败回调
  task.on('pause', this.pauseCallback); // 暂停任务回调
  task.on('resume', this.resumeCallback); // 重新启动任务回调
  task.on('progress', this.progressCallback); // 下载进度更新回调
}).catch((err: BusinessError) => {
  logger.error(TAG, `Failed to task create with error message: ${err.message}, error code: ${err.code}`);
});
  1. 启动下载任务。本例在每个FileDownloadItem中使用task.start方法启动各自的下载任务。源码参考FileDownloadItem.ets。
task.start((err: BusinessError) => {
  if (err) {
    logger.error(TAG, `Failed to task start with error message: ${err.message}, error code: ${err.code}`);
    return;
  }
  this.downloadTask = task;
})

高性能知识点

本示例中注册了progress下载进度更新监听,不建议在下载进度更新回调中加日志打印,以减少不必要的性能损耗。

工程结构&模块类型

multiplefilesdownload                               // har类型
|---view
|   |---MultipleFilesDownload.ets                   // 视图层-文件下载页面
|   |---FileDownloadItem.ets                        // 视图层-单个文件下载组件

模块依赖

本示例依赖common模块来实现日志的打印、动态路由模块来实现页面的动态加载。

参考资料

上传下载

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

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

开发基础知识:https://qr21.cn/FV7h05

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

基于ArkTS 开发:https://qr21.cn/FV7h05

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

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.
鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

腾讯T10级高工技术,安卓全套VIP课程全网免费送:https://qr21.cn/D2k9D5


http://www.niftyadmin.cn/n/5439275.html

相关文章

KY259 编排字符串(用Java实现)

描述 请输入字符串,最多输入4 个字符串,要求后输入的字符串排在前面,例如 输入:EricZ 输出:1EricZ 输入:David 输出:1David 2EricZ 输入:Peter 输出:1Peter 2Davi…

Java中过滤器和拦截器区别

1. 过滤器(Filters) 过滤器是Servlet规范中的一部分,它用于在请求进入Web应用程序时预处理请求,或在响应离开应用程序前进行处理。过滤器可以作用于请求内容、请求头、响应内容等。过滤器在Servlet容器中运行,并且与S…

耳机壳UV树脂制作私模定制耳塞需要什么样的设备和技术?

制作私模定制耳塞需要使用到一些特定的设备和技术,包括但不限于以下内容: 耳模制作工具:用于获取用户耳型的耳模制作工具,如硅胶、橡皮泥等。需要使用熟练的手法和技术,确保耳模的准确性和稳定性。UV树脂:…

React状态管理Mobx

1 https://zh.mobx.js.org/README.html 2 https://juejin.cn/post/7046710251382374413 3 https://cn.mobx.js.org/refguide/observable.html ​​mobx入门基础教程-慕课网​​ ​​Mobx学习 - 掘金​​ 十分钟入门 MobX & React ​​十分钟入门 MobX & React​​…

【技巧】ChatGPT Prompt 提示语大全

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 主要来自:https://github.com/f/awesome-chatgpt-prompts ChatGPT SEO prompts ChatGPT SEO提示 Contributed by: StoryChief AI Reference: 7 Powerful ChatGPT Prompts to Create SEO Content Faste…

Spring-Mybatis字段映射

MybatisComfig.xml文件设置 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings> 完成全局配置将数据库下划线映射为驼峰式命名

前端项目,个人笔记(二)【Vue-cli - 引入阿里矢量库图标 + 吸顶交互 + setup语法糖】

目录 1、项目中引入阿里矢量库图标 2、实现吸顶交互 3、语法糖--<script setup> 3.1、无需return 3.2、子组件接收父组件的值-props的使用 3.3、注册组件 1、项目中引入阿里矢量库图标 步骤一&#xff1a;进入阿里矢量库官网中&#xff1a;iconfont-阿里巴巴矢量…

Siloed No More: How AI-Driven Tech Stack Consolidation Boosts Revenue

AI驱动的技术堆栈整合提升收入 引言 通过利用AI优化销售工作流程并最大化收入&#xff0c;组织可以从低效的“零件袋”转变为AI驱动的协同效应。关键收入员工依赖技术来完成工作&#xff0c;但过时和脱节的技术堆栈阻碍了他们组织持续和重复掌握收入的能力。调查显示&#xf…