RxDownload-基于RxJava打造的下载工具, 支持多线程和断点续传

2023-11-16

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/1104/6743.html

大文件下载测试中,内存占用一直趋于平稳

主要功能:

  • 使用Retrofit+OKHTTP来进行网络请求

  • 基于RxJava打造, 支持RxJava各种操作符链式调用

  • 若服务器支持断点续传, 则使用多线程断点下载

  • 若不支持断点续传,则进行传统下载

  • 多线程下载, 可以设置最大线程, 默认值为3线程

  • 网络连接失败自动重连, 可配置最大重试次数, 默认值为3次

  • 利用Java NIO 中的 MappedByteBuffer内存映射进行高效读写文件

  • 流式下载,再大的文件也不会造成内存泄漏

  • 支持根据Last-Modified字段判断服务端文件是否变化

  • 与服务器进行验证过程中,使用更轻便的HEAD请求方式仅获取响应头,减轻通信数据量

下载流程图

download.png

使用方式

1.添加Gradle依赖

Download


  
  
  1.   dependencies{
  2.          compile 'zlc.season:rxdownload:1.1.1'
  3.     }

2.代码调用


  
  
  1. Subscription subscription = RxDownload.getInstance()
  2.                 .download(url, "weixin.apk", null)
  3.                 .subscribeOn(Schedulers.io())
  4.                 .observeOn(AndroidSchedulers.mainThread())
  5.                 .subscribe(new Subscriber<DownloadStatus>() {                    
  6.                     @Override
  7.                     public void onCompleted() {
  8.  
  9.                     }                   
  10.                     @Override
  11.                     public void onError(Throwable e) {
  12.  
  13.                     }                    
  14.                     @Override
  15.                     public void onNext(final DownloadStatus status) {
  16.  
  17.                     }
  18.                 });

download(String url, String saveName, String savePath)参数说明:

参数分别为下载地址,保存文件名,保存地址.

url与saveName为必传参数, savePath为可选参数, 默认的下载地址为/storage/emulated/0/Download/目录下, 也就是内置存储的Download目录

3.参数配置

可以配置的参数如下:


  
  
  1. Subscription subscription = RxDownload.getInstance()
  2.                 .maxThread(10)     //设置最大线程
  3.                 .maxRetryCount(10) //设置下载失败重试次数
  4.                 .retrofit(myRetrofit)//若需要自己的retrofit客户端,可在这里指定
  5.                 .defaultSavePath(defaultSavePath)//设置默认的下载路径
  6.                 .download(url,savename,savepath) //开始下载
  7.                 .subscribeOn(Schedulers.io())
  8.                 .observeOn(AndroidSchedulers.mainThread())
  9.                 .subscribe(new Subscriber<DownloadStatus>() {                   
  10.                     @Override
  11.                     public void onCompleted() {
  12.  
  13.                     }                    
  14.                     @Override
  15.                     public void onError(Throwable e) {
  16.  
  17.                     }                    
  18.                     @Override
  19.                     public void onNext(DownloadStatus status) {                   
  20.                      //Status表示的是当前的下载进度
  21.                     }
  22.                 });

4.DownloadStatus 下载状态


  
  
  1. class DownloadStatus {    
  2.     private long totalSize;    
  3.     private long downloadSize;    
  4.     public boolean isChunked = false;    
  5.     //...
  6.     //返回文件总大小,单位为byte
  7.     public long getTotalSize() {}    
  8.     //返回已下载总大小,单位为byte
  9.     public long getDownloadSize() {}    
  10.     //返回格式化的总大小,如:10MB
  11.     public String getFormatTotalSize() {}   
  12.      //返回格式化的已经下载的大小,如:5KB
  13.     public String getFormatDownloadSize() {}   
  14.      //返回格式化的状态字符串,如:2MB/36MB
  15.     public String getFormatStatusString() { }    
  16.     //返回下载的百分比, 保留两位小数,如:5.25%
  17.     public String getPercent() {}
  18. }

5.取消或暂停下载


  
  
  1. Subscription subscription = RxDownload.getInstance()
  2.                 .download(url, null, null)                
  3.                 
  4. //...//取消订阅, 即可暂停下载, 若服务端不支持断点续传,下一次下载会重新下载,反之会继续下载
  5. if (subscription != null && !subscription.isUnsubscribed()) {
  6.          subscription.unsubscribe();
  7. }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RxDownload-基于RxJava打造的下载工具, 支持多线程和断点续传 的相关文章

  • windgb调试

    reference http hi baidu com lewutian blog item 191047882b9c399fa5c27261 html 调试前的必备工作 在开始调试前首先要做的工作是设置好符号 Symbols 路径 没有符
  • easy-excel批量导出数据

    easy excel批量导出 前言 最近遇到个用户数据批量导出excel的需求 第一次看到这个需求大家第一时间想到的应该大多都是easy excel这个框架吧 哈哈 我第一时间想到的也是这个框架 但是对于少量的数据 比如有10个用户这样的数
  • Linux 启动脚本 完全注释 1 -- 整体流程

    Linux太伟大了 什么东西都可以由你来做主 Linux加载完内核后 所有的其他系统服务 进程 都是靠脚本来加载的 所以Linux是这么的透明 你可以清除的指导你的系统做了什么 下面我就对Linux的启动脚本做了注释 该脚本是属于LFS的
  • Spring源码分析(一):Spring底层核心原理解析

    本节只讲结论 不做验证 后面会专门拉代码讲解验证 Spring的核心是IOC和AOP 大概有这么几个核心知识点 Bean的生命周期底层原理 依赖注入底层原理 初始化底层原理 推断构造方法底层原理 AOP底层原理 Spring事务底层原理 S
  • Java的反射技术(Class类,Constructor类,Method类, Field类)

    Java编码时知道类和对象的具体信息 此时直接对类和对象进行操作即可 无需反射 如果编码时不知道类或者对象的具体信息 此时应该使用反射来实现 为什么要使用反射 反射就是把Java类中的各种成分映射成一个个的java对象 例如 一个类有 成员
  • maven环境变量配置,总不成功,你就这样试试

    我下载了maven 解压后的目录为 配置了用户变量为下图 然后配置系统的path变量如下图 配置完后我也重启了系统 但是还是显示为下图 这是怎么回事 我进入 bin 下执行命令就没问题 说明程序好好的 但是这个怎么就是不成功呢 分享到 举报
  • 链圈的朋友们值得收藏!腾讯首席架构师教你两种区块链设计思路

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由敖萌发表于云 社区专栏 区块链发展到了现在 产生了很多不同形式的区块链技术 随着技术的发展 目前比较公认的看法是区块链已经走进了2 0时代 区块链1 0是以比特币为代表的去中心
  • Struts2 重点总结 (2)

    国际化 资源文件和资源包 要用Struts实现国际化和本地化 首先要定义资源文件的名称 这个文件会包含用默认语言编写的会在程序中出现的所有消息 这些消息以 键 值 对的形式存储 如下 error validation localtion T
  • SpringMVC:从入门到精通,7篇系列篇带你全面掌握--五.JSR303和拦截器

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于SpringMVC的相关操作吧 目录 Welcome Huihui s Code World 一 JSR303是什么 二 使用JSR303的优势 三 使用JS
  • style-components的熟练运用

    安装 首先下一个包 npm install save styled components 使用 创建组价以及根据属性加样式 import React Component from react import styled from style
  • SSM框架之MyBatis(二)--多表查询及查询结果映射

    使用MyBatis这一强大的框架可以解决很多赋值的问题 其中对于子配置文件中的小细节有很多需要注意的地方 使用这个框架后主要就是对于配置文件的编写和配置 今天我写了一个多表查询 表的基本结构如下 用户表t user 用户编号uid 账号ac
  • 如何设计一个麻雀般的微型分布式架构?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由mariolu 发表于云 社区专栏 序言 初衷 设计该系统初衷是基于描绘业务 或机器集群 存储模型 分析代理缓存服务器磁盘存储与回源率的关系 系统意义是在腾讯云成本优化过程中
  • Log4j2自定义插件实现自定义日志打印功能(脱敏/加密)

    文章目录 1 自定义appender插件 2 log4j2 xml配置 3 参数说明 1 定义标签 Plugin 2 定义标签参数或子元素 PluginFactory 4 获取容器中对象 5 Mybatis 设置日志打印实现为Log4j2I
  • Spring的IOC,DI和AOP

    spring的优点 IOC和DI降低了组件之间的耦合性 让程序员更专注于业务逻辑 容器提供了众多的辅助类 能加快应用的开发 spring对于主流的应用框架提供了集成支持 如hibernate mybatis Struts等 spring属于
  • Spring面向切面编程-AOP

    前言 在软件开发中 面向切面编程 Aspect Oriented Programming AOP 是一个非常重要的编程范式 Spring AOP是Spring框架提供的AOP实现 在Spring中使用AOP实现企业应用开发已经非常普遍 本文
  • SpringBoot集成hystrix

    文章目录 hystrix有什么用 在SpringBoot项目中集成 更多配置示例 配置线程池 配置信号量 配合feignClient使用 基本配置 可视化组件 视图hystrix dashboard 汇总监控turbine 参考 hystr
  • 写需求分析必须牢记的5大要点

    需求验证的5大要点 要做好需求验证 必须在思想 方法 语言 人员 内容5个要点上做好相应的工作 否则就会产生很多负面的影响 1 思想 前面已经说过 由于Review被翻译成 评审 导致很多人将其与中国人常说的评审相混淆 其实它们之间是有区别
  • 值得一看的WinPhone入门系列文章

    今天发现了一些Windows Phone开发入门的系列文章 很适合初学者 下面把其连接总结如下 1 概论 http www winphonecoder com forum php mod viewthread tid 185 extra p
  • Quartz框架多个trigger任务执行出现漏执行的问题分析

    一 问题描述 使用Quartz配置定时任务 配置了超过10个定时任务 这些定时任务配置的触发时间都是5分钟执行一次 实际运行时 发现总有几个定时任务不能执行到 二 示例程序 1 简单介绍 采用spring quartz整合方案实现定时任务
  • 封装的几种形式

    你说的时cpu的封装吗 供你参考 集成电路芯片的封装形式 自从美国Intel公司1971年设计制造出4位微处a理器芯片以来 在20多年时间内 CPU从Intel4004 80286 80386 80486发展到Pentium和Pentium

随机推荐

  • python collections.OrderedDict有序字典的使用

    detectron2中大量的使用OrderedDict 有序字典 有序字典可以按字典中元素的插入顺序来输出 python的基础数据类型中的字典类型分为 无序字典与有序字典两种类型 1 无序字典 普通字典 遍历一个普通字典 返回的数据和定义字
  • 关于api-ms-win-crt-runtime

    关于api ms win crt runtime 1 1 0 dll缺失的解决方案 问题原因 有时 我们在打开文件程序的时候经常出现一些关于以下的错误 无法启动此程序因为计算机中丢失api ms win crt runtime 1 1 0
  • C语言 输出 1000 对孪生素数

    孪生素数就是差值为 2 的成对素数 例如3和5 5和7 11和13 代码实现 include
  • 如何解决vue项目打包内存溢出问题

    在打包命令配置文件中加入图中代码即可 cross env NODE OPTIONS max old space size 4096
  • string的用法

    std string的初始化 std string 变量名称 字符串 要截取的长度 std string str 123456 3 str 123 注 中文时支持不佳 std string 变量名称 字符串 起始位置 截取长度 std st
  • 第7篇 rabbitmq 创建SocketFrameHandler

    本节主要是熟悉socketFrameHandlerFactory类 真正涉及到socket流处理器 展示如下类图 我们本文关心是SocketFrameHandlerFactory 和SocketFrameHandler 由类图可以知道Soc
  • 安全狗linux 安装教程,linux网站安全狗(apache版)安装教程

    以32位安装包为例子 64位安装包只要将对应的32改成64即可 步骤一 到http safedog cn下载软件安装包 tar gz格式 safedogwz linux32 tar gz 也可以采取wget的方式下载安装包 wget htt
  • 如何制作和训练自己的数据集(YoloV5)

    标注方法 1 自己获取的数据集 人工进行标注 全人工 2 自己获取的数据集 首先使用训练好的网络标注一遍 然后手动进行微调 半人工 3 仿真数据集 GAN网络来生成自己的数据集 synthetic data 标注工具 1 CVAT 需要安装
  • undefined 和 undeclared 的区别

    var a undefined b b is not defined 区别 在变量作用域中已经申明但没有赋值的变量 如 a 是undefined 相反 在变量作用域中没有申明过的变量 是undeclared 我们试图访问 undeclare
  • ahook中常用的一些hooks

    官方文档 https ahooks js org zh CN 以下总结一些个人认为非常实用的hook 1 useRequest 请求 import useRequest from ahooks const getSome async gt
  • VUE中使用防抖和节流

    目的 减少请求次数 节省资源 防抖 在事件触发n秒后执行函数 如果在n秒内再次出发 就重新计算 节流 在多次执行某一动作时 限制为每隔一段时间执行一次函数 防抖 连续的事件 只需触发一次 eg 高频率的点击 防止表单重复提交 输入框搜索 输
  • jdk8以上jvm常用参数

    这几天一直在折腾jvm调优的事情 作为新手 把自己遇到的问题记录下来 调整jvm参数的方法有很多 网上也到处是 我也看了很多 选择用tomcat进行jvm参数设置 linux服务器配置 linux系统下的tomcat通过startup sh
  • MySQL优化之索引原理(二)

    一 前言 上一篇内容说到了MySQL存储引擎的相关内容 及数据类型的选择优化 下面再来说说索引的内容 包括对B Tree和B Tree两者的区别 1 1 什么是索引 索引是存储引擎用于快速找到记录的一种数据结构 对性能的提升有很大的帮助 尤
  • 让我来教你如何免费使用RHEL小红帽系统

    RHEL安装注册过程中遇到的问题 从开始注册到正常使用 如何获取正版RHEL 注意事项 VMware虚拟机下载安装 安装中出现的问题 从开始注册到正常使用 答主是个动手能力比较强的人 所以当老师讲到Linux的时候 我就已经掌握了Linux
  • 计算机表格怎么取消分页,Excel表格自动分页、取消分页等技巧 专家详解

    Excel是一款功能强大的软件 利用Excel制作表格时 有时我们需要对表格进行分页打印 那么Excel表格如何自动分页 取消分页呢 下面小编为你带来解答 工具 材料 Excel2010 操作方法 01 打开Excel2010 进入要编辑的
  • 程序包com.sun.xml.internal.messaging.saaj.packaging.mime.util不存在

    添加maven compiler plugin插件即可
  • 区块链技术的应用与发展

    区块链的概念 区块链技术起源于2008年由化名 中本聪 的学者在密码学邮件组发表的奠基性论文 比特币 一种点对点电子现金系统 目前尚没有行业内公认的区块链定义 狭义来讲 区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一 种链式数
  • 怎么解决Ubuntu下Hadoop的报错:hadoop:command not found?

    在执行hadoop下的子项目 文字计数功能时出现hadoop command not found 的报错 通过百度以及问老师同学才知道报错的原因是Hadoop的环境变量配置出了问题 解决方案如下 输入命令 sudo vi etc profi
  • 滑动窗口+前缀和-8--LC930.和相同的二元子数组

    class Solution object def numSubarraysWithSum self nums goal type nums List int type goal int rtype int 1 前缀和 presum 0 a
  • RxDownload-基于RxJava打造的下载工具, 支持多线程和断点续传

    http www jcodecraeer com a anzhuokaifa androidkaifa 2016 1104 6743 html 大文件下载测试中 内存占用一直趋于平稳 主要功能 使用Retrofit OKHTTP来进行网络请