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

介绍

多文件下载监听在应用开发中是一个非常常见的需求。本示例将介绍如何使用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.mfbz.cn/a/470100.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Godot4.2】2D导航04 - TileMap导航的逻辑

基于NavigationRegion2D 我们基于NavigationRegion2D的逻辑一文的场景结构,但是将NavigationRegion2D删除,更改为TileMap节点。 为TileMap创建Tileset,并创建一个导航层。在TileSet面板中,为草地和黄色泥土地面图块绘制可通行区…

②免费AI软件开发工具测评:通义灵码 VS 码上飞

前言 我又双叒叕来测评了!上次给大家带来的是iFlyCode和CodeFlying两款产品的测评,受到了大家的一致好评~ 今天咱就继续来聊聊,这次我们选的的对象是通义灵码和码上飞,从名字上也能看到出来这两款产品一定是跟软件开发有关系的&…

机器视觉系统选型-镜头基础知识

广角镜头:焦距小于标准焦距50mm的。例如:16mm 景深大,聚焦距离更近 远距照像镜头:焦距大于标准焦距50mm的。例如:75mm 景深浅,放大远距离物体 变焦镜头:镜头焦距可调节,焦距有范围&a…

web前端框架设计第二课-Vue.js简介

web前端框架设计第二课-Vue.js简介 一.预习笔记 1.Vue.js概述 Vue.js是一套用于构建用户界面的渐进式框架。本质上是一个用于开发Web前端界面的库,其本身具有响应式编程和组件化的特点。 Vue.js的特性: 轻量级 数据绑定 应用指令 插件化开发 2.V…

面试八-git使用

1. 初始化(git init 把这个目录变成git可以管理的仓库) git init 2. 添加到暂存区里面去 git add readme.txt 3. 查看文件状态 git status 4. 提交到本地仓库 git commit -m " 版本信息“ readme.txt 5. 查看readme.txt文件到底改了什么内容…

大模型面试题最全总结,没有一道是送分题。。。

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂同学、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 今天分享…

视频素材免费下载素材库哪里有?推荐8个高清无水印素材网

在这个数字化时代,无论是专业的内容创作者还是日常的社交媒体使用者,我们都会寻找高质量的素材来丰富我们的作品或帖子。从令人震撼的摄影作品到高分辨率的视频素材,再到生动的GIF和必需的设计元素,素材的需求无处不在。 视频素材…

DZY-212中间继电器 DC 220V 板后接线 面板安装 JOSEF约瑟

系列型号: DZY-200系列中间继电器;DZY-201中间继电器; DZY-202中间继电器;DZY-203中间继电器; DZY-204中间继电器;DZY-205中间继电器; DZY-206中间继电器;DZY-207中间继电器; DZY-20…

Leetcode 70.爬楼梯

心路历程: 这道题是之前学院的一道复试题,大家都没怎么刷过算法题,只记得当年凭借几次试错自己把这道题做出来了,当时也不知道动态规划之类的。 正常来讲,这种找不到循环结构的题一般都是递归解决。 注意的点&#x…

js 中文乱码解决、乱码对照

1、js iso-8859-1转utf-8 在JavaScript中,可以使用内置的TextEncoder和TextDecoderAPI来实现ISO-8859-1编码和UTF-8编码之间的转换。以下是一个将ISO-8859-1编码的字符串转换为UTF-8编码的示例代码: function convertISO88591ToUTF8(isoString) {// 将…

上班族兼职宝典:五个副业赚钱项目助你财富增值

在快节奏的现代生活中,许多上班族已不再满足于固定的月薪,纷纷寻求额外收入来源以缓解生活压力。副业赚钱作为一种有效途径,正逐渐受到他们的青睐。为此,我们为上班族精心挑选了五种可行的副业赚钱方式,助力他们在工作…

蓝牙耳机连上电脑后播放音频一卡一卡的还有声音变形,电脑连接后总是容易断开蓝牙

蓝牙耳机连上电脑后播放音频一卡一卡的还有声音变形,电脑连接后总是容易断开蓝牙 问题描述问题排查可能6可能7电脑蓝牙驱动问题 结语: 问题描述 蓝牙耳机连上电脑后播放音频一卡一卡的还有声音变形,电脑连接后总是容易断开蓝牙。 关键之前我…

详细教---用Django封装写好的模型

本次我们要用自己写好的热销词条爬虫代码来演示如何用Django把我们写好的模型封装。 第一步:代码准备 热搜词条搜集代码: import requests from lxml import etreeurl "https://tophub.today/n/KqndgxeLl9" headers{User-Agent: Mozilla/5.…

【Godot4.2】 基于SurfaceTool的3D网格生成与体素网格探索

概述 说明:本文基础内容写于2023年6月,由三五篇文章汇总而成,因为当时写的比较潦草,过去时间也比较久了,我自己都得重新阅读和理解一番,才能知道自己说了什么,才有可能重新优化整理。 因为我对…

Redis数据结构对象之集合对象和有序集合对象

集合对象 集合对象的编码可以是intset或者hashtable. 概述 intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面。 另一方面,hashtable编码的集合对象使用字典作为底层实现,字典的每个键都是一个…

H.整数删除【蓝桥杯】优先队列+双向链表

优先队列 在头文件 < q u e u e > <queue> <queue>中定义方法&#xff1a;priority_queue<储存的类型,vector<储存的类型>,顶堆的类型> 容器名less<储存的数据类型> 即使用大顶堆&#xff0c;即队首为最大元素greater<储存的数据类型&…

DSP课程学习

Some Problem warning #10210-D: creating “.stack” section with default size of 0x400; use the -stack option to change the default size warning #10210-D: creating “.sysmem” section with default size of 0x400; use the -heap option to change the default si…

153.乐理基础-和弦的织体

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;152.广义的、实际的原位与转位、转位的意义 上一个内容里练习的答案&#xff1a;和弦的标记有很多种表示法不一定非要和下图中一样&#xff0c;具体参考150.和弦固定标记法&#xff08;一&#xff09;原位三和弦、…

布料放大100倍后是什么样子

说明 生活中绝大多数面料都是人造化学材料做成的。将纺织面料放大100X以上看到的样子都是那种塑料的感觉&#xff0c;和宏观的外观差别很大。我最近在做这方面的事情&#xff0c;这里分享几张布料的放大图片。 放大图片 这些布料看上去都很普通&#xff0c;但是放大后各有特…

【vue核心技术实战精讲】1.1 Vue开篇介绍 + 1.2 Vue的起步 和 插值表达式

文章目录 准备开始适应人群vue 框架学习路线一、vue 基础1、历史介绍2、前端框架与库的区别? 二、vue的起步 和 插值表达式Stage 1&#xff1a;下载包&#xff0c;并放入项目中Stage 2&#xff1a;编码 准备开始 适应人群 有一定的HTML/CSS/JavaScriptES6基础开发人员 vue …
最新文章