基于RxJava打造的下载工具, 支持多线程和断点续传
项目地址
主要功能:
- 使用Retrofit+OKHTTP来进行网络请求
- 基于RxJava打造, 支持RxJava各种操作符链式调用
- 断点续传, 根据服务端响应值自动判断是否支持断点续传
- 若不支持断点续传,则进行传统下载
- 多线程下载, 可以设置最大线程, 默认值为3
- 检测到网络连接失败自动尝试重连, 并可配置最大重试次数,默认值为3
- 支持根据Last-Modified字段判断服务端文件是否变化
- 与服务器进行验证过程中,使用更轻便的HEAD请求方式仅获取响应头,减轻服务端负担
使用方式
1.添加Gradle依赖
dependencies{
compile 'zlc.season:rxdownload:1.1.0'
}
2.代码调用
Subscription subscription = RxDownload.getInstance()
.download(url, "weixin.apk", null)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<DownloadStatus>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(final DownloadStatus status) {
}
});
download(String url, String saveName, String savePath)参数说明:
参数分别为下载地址,保存文件名,保存地址.
url与saveName为必传参数, savePath为可选参数, 默认的下载地址为/storage/emulated/0/Download/目录下, 也就是内置存储的Download目录
3.参数配置
可以配置的参数如下:
Subscription subscription = RxDownload.getInstance()
.maxThread(10) //设置最大线程
.maxRetryCount(10) //设置下载失败重试次数
.retrofit(myRetrofit)//若需要自己的retrofit客户端,可在这里指定
.defaultSavePath(defaultSavePath)//设置默认的下载路径
.download(url,savename,savepath) //开始下载
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<DownloadStatus>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(DownloadStatus status) {
//Status表示的是当前的下载进度
}
});
4.DownloadStatus 下载状态
class DownloadStatus {
private long totalSize;
private long downloadSize;
public boolean isChunked = false;
//...
//返回文件总大小,单位为byte
public long getTotalSize() {}
//返回已下载总大小,单位为byte
public long getDownloadSize() {}
//返回格式化的总大小,如:10MB
public String getFormatTotalSize() {}
//返回格式化的已经下载的大小,如:5KB
public String getFormatDownloadSize() {}
//返回格式化的状态字符串,如:2MB/36MB
public String getFormatStatusString() { }
//返回下载的百分比, 保留两位小数,如:5.25%
public String getPercent() {}
}
5.取消或暂停下载
Subscription subscription = RxDownload.getInstance()
.download(url, null, null)
//...
//取消订阅, 即可暂停下载, 若服务端不支持断点续传,下一次下载会重新下载,反之会继续下载
if (subscription != null && !subscription.isUnsubscribed()) {
subscription.unsubscribe();
}
6.更多功能后续将会逐步完善
若您对此项目有疑问,欢迎来提issues.
最后
在现在这个金三银四的面试季,我自己在网上也搜集了很多资料做成了文档和架构视频资料免费分享给大家【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
资料获取方式:加入Android架构交流QQ群聊:513088520 ,进群即领取资料!!!
点击链接加入群聊【Android移动架构总群】:加入群聊

网友评论