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打造的下载工具, 支持多线程和断点续传 的相关文章

  • easy-excel批量导出数据

    easy excel批量导出 前言 最近遇到个用户数据批量导出excel的需求 第一次看到这个需求大家第一时间想到的应该大多都是easy excel这个框架吧 哈哈 我第一时间想到的也是这个框架 但是对于少量的数据 比如有10个用户这样的数
  • Spring源码分析(一):Spring底层核心原理解析

    本节只讲结论 不做验证 后面会专门拉代码讲解验证 Spring的核心是IOC和AOP 大概有这么几个核心知识点 Bean的生命周期底层原理 依赖注入底层原理 初始化底层原理 推断构造方法底层原理 AOP底层原理 Spring事务底层原理 S
  • 解析WINDOWS中的DLL文件---经典DLL解读

    在Windows世界中 有无数块活动的大陆 它们都有一个共同的名字 动态链接库 现在就走进这些神奇的活动大陆 找出它们隐藏已久的秘密吧 初窥门径 Windows的基石 随便打开一个系统目录 一眼望去就能看到很多扩展名DLL的文件 这些就是经
  • Mybatis学习

    mybatis面向接口编程 1 mybatis配置文件
  • please remember me(auto login)

    记住我 用户自动登录的实现 auto login 一 什么是用户自动登录 对于我们的网站向已注册用户提供某些专门的服务 比如网上购物 在线下载 收费浏览等等 就会要求用户在使用这些服务之前进入登录页面 输入用户名和密码 并进行验证 如果用户
  • POI框架导出EXCEL的简单列子(跨行跨列)合并单元格

    public static void main String args throws IOException try HSSFWorkbook wb new HSSFWorkbook HSSFSheet sheet wb createShe
  • 框架理解(Unity(C#))

    文章目录 前言 一 什么是框架 二 怎么做框架 这里讲的是Unity C 1 沟通后端的url集合 理解为数据集 命名空间 接口也理解为数据集 3 做协程或方法 理解为具体方法的实现集 3 用委托的方法去做 理解为预备方法集 总结 为什么做
  • SpringMVC:从入门到精通,7篇系列篇带你全面掌握--六.JSON处理和全局异常处理

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于SpringMVC的相关操作吧 目录 Welcome Huihui s Code World 前言 一 SpringMVC中json数据的处理 1 导入相关依
  • 理解Spring的AOP和Ioc/DI就这么简单

    一 什么叫Ioc DI Ioc Inversion of Control 控制反转 DI Dependency Injection 依赖注入 其实这两个概念本质上是没有区别的 那我们先来看看什么叫做Ioc 假设这么一个场景 在A类中调用B类
  • 框架的注解

    文章目录 一 mybatis 1 MyBatis的常用注解 2 MyBatis的注解实现复杂映射开发 二 Spring 1 Spring原始注解 2 Spring新注解 3 注解配置 AOP 详解 三 springMVC 1 Request
  • 接口的加密解密

    接口加密 1 接口参数加密 基础加密 2 接口参数加密 接口时效性验证 一般达到这个级别已经非常安全了 3 接口参数加密 时效性验证 私钥 达到这个级别安全性固若金汤 4 接口参数加密 时效性验证 私钥 Https 我把这个级别称之为金钟罩
  • Weex 介绍

    文章目录 一丶Weex的介绍 二丶前置知识 三丶适用人群 四丶Weex的优势 五丶难点 六丶Weex ReactNative Flutter的区别 七丶设计理念 八丶基本原理 九丶有谁在用 十丶Weex调试工具 十一丶构建一个最简单的应用
  • 使用jasypt为springboot配置文件加密

    使用jasypt为配置文件加密 配置项明文可能出现的问题 先看一份典型的配置文件 配置MySQL数据库连接 spring datasource driver class name com mysql jdbc Driver spring d
  • Spring面向切面编程-AOP

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

    文章目录 hystrix有什么用 在SpringBoot项目中集成 更多配置示例 配置线程池 配置信号量 配合feignClient使用 基本配置 可视化组件 视图hystrix dashboard 汇总监控turbine 参考 hystr
  • 从0开始写Vue项目-Vue页面主体布局和登录、注册页面

    1 从0开始写Vue项目 环境和项目搭建 慕言要努力的博客 CSDN博客 2 从0开始写Vue项目 Vue2集成Element ui和后台主体框架搭建 慕言要努力的博客 CSDN博客 一 主体布局 关于主体布局 我们刚开始肯定是做的死数据的
  • 让dapper支持Oracle

    之前的项目数据使用mssql和mysql ORM使用一个轻量级的dapper 感觉很方便 性能也比EF强 关键是语法灵活 上手容易 用这种框架开发了几个网站 感觉非常好 但新项目要使用oracle 就出问题了 dapper里的关键字 在or
  • 一些大厂的开源平台

    百度 http fex baidu com http efe baidu com 饿了么 https fe ele me 腾讯 http www alloyteam com 美团 https tech meituan com 滴滴 http
  • mfc窗口创建的create与oncreate

    在view类中 create 是虚函数由框架调用 是用来 生成一个窗口的子窗口 oncreate 消息响应函数 是用来 表示一个窗口正在生成 某个CWnd的Create函数由当前CWnd的Owner调用 而在CWnd Create中 又会调
  • iOS自动布局——Masonry详解

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由鹅厂新鲜事儿发表于云 社区专栏 作者 oceanlong 腾讯 移动客户端开发工程师 前言 UI布局是整个前端体系里不可或缺的一环 代码的布局是设计语言与用户视觉感受沟通的桥梁

随机推荐

  • 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来进行网络请