HarmonyOS鸿蒙开发实战(5.0)多文件下载监听应用案例实践

鸿蒙HarmonyOS NEXT开发实战往期文章必看(持续更新......)

HarmonyOS NEXT应用开发性能实践总结

HarmonyOS NEXT应用开发案例实践总结合集

最新版!"非常详细的" 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)

非常详细的" 鸿蒙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表示发出每个进度已完成或失败的通知。
    };
    
  2. 创建多个文件下载监听实例。单个文件下载监听只需要配置下载参数,创建下载任务,注册下载任务相关监听,启动下载任务即可实现。而要实现多文件下载监听,需要每个下载任务注册独立的下载监听回调。本例通过封装自定义组件FileDownloadItem,在每个FileDownloadItem中创建各自的下载任务和监听回调,从而实现多文件下载监听。源码参考MultipleFilesDownload.ets

    ForEach(this.downloadConfigArray, (item: request.agent.Config) => {
      ListItem() {
        // 创建文件下载监听实例
        FileDownloadItem({
          downloadConfig: item, // 文件下载配置
          isStartAllDownload: this.isStartAllDownload, // 是否全部开始下载
          downloadCount: this.downloadCount // 待下载任务数量
          downloadFailCount: this.downloadFailCount // 下载失败任务数量
        })
      }
    }, (item: request.agent.Config) => JSON.stringify(item))
    
  3. 创建下载任务,并注册下载任务相关监听。本例在每个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}`);
    });
    
  4. 启动下载任务。本例在每个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下载进度更新监听,不建议在下载进度更新回调中加日志打印,以减少不必要的性能损耗。

FAQ

  1. 无网络时,点击"全部开始",下载队列中的任务状态却显示"已暂停"。

    答:request.agent.Config有一个参数retry默认是true,如果没有网络或者网络不满足时,会自动暂停waiting,所以在没网络的时候下载底层逻辑会走暂停回调,应用侧在暂停回调里设置了显示当前下载状态,所以无网络时,点击"全部开始",下载队列中的任务状态显示"已暂停"。目前本例中已经把retry设置为false,没网络时,开启下载任务会直接走入失败回调,直接显示"下载失败"。

工程结构&模块类型

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

模块依赖

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

最后

小编在之前的鸿蒙系统扫盲中,有很多朋友给我留言,不同的角度的问了一些问题,我明显感觉到一点,那就是许多人参与鸿蒙开发,但是又不知道从哪里下手,因为体系杂乱无章,教授的人也多,无从选择。有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)路线、视频、文档用来跟着学习是非常有必要的。

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员

鸿蒙 NEXT 全栈开发学习笔记希望这一份鸿蒙学习文档能够给大家带来帮助~

这份鸿蒙(HarmonyOS NEXT)包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。


鸿蒙(HarmonyOS NEXT)最新学习路线

该路线图包含基础技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不仅补充了华为官网未涉及的解决方案

路线图适合人群:

IT开发人员: 想要拓展职业边界
零基础小白: 鸿蒙爱好者,希望从0到1学习,增加一项技能。
**技术提升/进阶跳槽:**发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术

2.视频教程+学习PDF文档

(鸿蒙语法ArkTS、TypeScript、ArkUI教程......) 全球开发者的开源社区,开源代码

纯血版鸿蒙全套学习文档(面试、文档、全套视频等) 全球开发者的开源社区,开源代码

鸿蒙APP开发必备

​​

总结

参与鸿蒙开发,你要先认清适合你的方向,如果是想从事鸿蒙应用开发方向的话,可以参考本文的学习路径,简单来说就是:为了确保高效学习,建议规划清晰的学习路线

相关推荐
建群新人小猿几秒前
会员等级经验问题
android·开发语言·前端·javascript·php
爱上语文2 分钟前
HTML和CSS 表单、表格练习
前端·css·html
djk888812 分钟前
Layui Table 行号
前端·javascript·layui
007php00714 分钟前
GoZero 上传文件File到阿里云 OSS 报错及优化方案
服务器·开发语言·数据库·python·阿里云·架构·golang
数据小小爬虫15 分钟前
如何利用Java爬虫获得1688店铺详情
java·开发语言
Tech Synapse16 分钟前
Python网络爬虫实践案例:爬取猫眼电影Top100
开发语言·爬虫·python
SuperHeroWu724 分钟前
【HarmonyOS】鸿蒙应用接入微博分享
华为·harmonyos·鸿蒙·微博·微博分享·微博sdk集成·sdk集成
期待未来的男孩26 分钟前
华为FusionCube 500-8.2.0SPC100 实施部署文档
华为
biomooc27 分钟前
R语言/Rstudio 报错
开发语言·r语言
Theliars32 分钟前
C语言之字符串
c语言·开发语言