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

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. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值