最近封装了一个基于OkHttp3+Retrofit2+RxJava2的下载库给自己的项目用。

断点续传

多任务

数据库存储

先上图(有点糊,各位看官将就一下,有没有人给推荐一个靠谱点的录屏工具【摔盐】不用Windows,谢谢)

preview.gif

嗯。大概就是这鸟样子。有要吐槽UI的,请你安静点,请你安静点,耶~

可能因为服务器和模拟器是同一台电脑,所以速度比较快。。。

下面是重点

//核心库

implementation 'eason.linyuzai:eason-download:1.0.1'

//如有需要可以添加额外的监听器

implementation 'eason.linyuzai:eason-download-listeners:1.0.1'

然后是最简单的用法

//可以当成Http Client

ELoad eload = ELoad.Builder(Context context).build();

//可以当成一个Request

DownloadTask task = eload.url(String url).create();

task.start();

然后来讲一下自定义配置

ELoad配置

//ELoad配置,配置对所有该ELoad生成的Task生效

ELoad eload = ELoad.Builder(Context context)

//任务回收器,默认使用TaskQueueRecycler

.setTaskRecycler(TaskRecycler taskRecycler)

//文件写入器,默认使用OkioSourceFileProcessor

.setFileProcessor(FileProcessor fileProcessor)

//下载路径,默认context.getExternalCacheDir()+"/ELoad"

.setDownloadPath(String downloadPath)

//生成OkHttpClient.Builder,默认使用DefaultOkHttpClientFactory

.setOkHttpClientFactory(OkHttpClientFactory okHttpClientFactory)

//生成Retrofit.Builder,默认使用DefaultRetrofitFactory

.setRetrofitFactory(RetrofitFactory retrofitFactory)

//数据库,默认null,不写入数据库

//提供SQLiteManager,也可自己定义,使用其他ORM库

.setDatabaseManager(DatabaseManager databaseManager)

//生成数据库Bean,如有需要,用于扩展注解式ORM框架

.setEntityCreator(DownloadTaskEntity.Creator entityCreator)

//下载进度监听

.addDownloadListeners(DownloadTask.DownloadListener listener)

//下载任务状态监听

.addDownloadTaskListener(DownloadTask.DownloadTaskListener listener)

.build();

DownloadTask配置

//方式1:

DownloadTask task = eload.url(String url)//url配置

//添加header

.header(String headerName, String headerValue)

//设置headers

.headers(Map headers)

//下载路径,对单个任务有效

.filepath(String filepath)

//文件名称,不设置会尝试根据Response等信息获取或随机生成

.filename(String filename)

//URLDecoder,配合服务端进行中文的编解码等

.urlDecoder(String urlDecoder)

//自定义数据

.extra(Serializable extra)

//下载进度监听,对单个任务有效

.downloadListener(DownloadTask.DownloadListener listener)

//下载任务状态监听,对单个任务有效

.downloadTaskListener(DownloadTask.DownloadTaskListener listener)

.create();

//方式2:

//通过数据库

List entities = eload.loadTaskEntitiesFromDatabase()

//将保存的任务记录重新生成DownloadTask

DownloadTask task = eload.convert(DownloadTaskEntity entity)

//下载进度监听,对单个任务有效

.downloadListener(DownloadTask.DownloadListener listener)

//下载任务状态监听,对单个任务有效

.downloadTaskListener(DownloadTask.DownloadTaskListener listener)

.create();

操作DownloadTask

//开始

DownloadTask.start();

//强制开始,在暂停,取消,异常的状态时可以重新下载

DownloadTask.start(true);

//暂停

DownloadTask.pause();

//继续,在暂停或异常的状态时可以继续下载

DownloadTask.resume();

//取消

DownloadTask.cancel();

//取消,并删除已下载的部分文件

DownloadTask.cancel(true);

//回收,可以在任务未开始,完成,异常,取消的状态时回收,复用OkHttpClient

DownloadTask.recycle();

DownloadTask属性

//获得DownloadTaskEntity

DownloadTaskEntity getEntity();

//running状态时,下载总进度

long getDownloadBytesTemp();

//是否是空闲状态

boolean isIdle();

//是否是准备状态

boolean isAttach();

//是否是下载状态

boolean isRunning();

//是否是暂停状态

boolean isPause();

//是否完成

boolean isFinish();

//是否异常

boolean isError();

//是否取消

boolean isCancel();

DownloadTaskEntity属性

//TaskId

String getTaskId();

//创建时间

long getCreateTime();

//执行状态

int getState();

//http(s) Headers

Map getHeaders();

//Url

String getUrl();

//URLDecoder

String getUrlDecoder();

//文件总大小

long getTotalBytes();

//已下载大小,只有暂停,取消,异常时才会更新

//更新进度请用DownloadTask.getDownloadBytesTemp()

long getDownloadBytes();

//文件路径

String getFilePath();

//文件名字

String getFileName();

//额外数据

Serializable getExtra();

使用RxJava2代替DownloadListener和DownloadTaskListener的监听

//回调下载进度和任务状态

DownloadTask.toObservable();

//回调下载进度

DownloadTask.toDownloadObservable();

//回调任务状态

DownloadTask.toTaskObservable();

DownloadTask.toObservable().subscribe({

switch(it.callType) {

case DownloadTaskWrapper.DOWNLOAD_CONTENT_LENGTH:

//文件大小

break;

case DownloadTaskWrapper.DOWNLOAD_BYTES_READ:

//字节读入

break;

case DownloadTaskWrapper.DOWNLOAD_COMPLETE:

//下载完成

break;

case DownloadTaskWrapper.TASK_PREPARE:

//任务准备

break;

case DownloadTaskWrapper.TASK_START:

//任务开始

break;

case DownloadTaskWrapper.TASK_PAUSE:

//任务暂停

break;

case DownloadTaskWrapper.TASK_RESUME:

//任务继续

break;

case DownloadTaskWrapper.TASK_ERROR:

//任务异常

break;

case DownloadTaskWrapper.TASK_COMPLETE:

//任务完成

break;

case DownloadTaskWrapper.TASK_CANCEL:

//任务取消

break;

case DownloadTaskWrapper.TASK_RESET:

//任务重置

break;

case DownloadTaskWrapper.TASK_RECYCLE:

//任务回收

break;

}

});

//开始任务

DownloadTask.start();

也提供Flowable的转换

额外的监听器

//网速计算

NetPerSecDownloadListener(TextView textView)

//剩余时间

RemainingTimeDownloadListener(TextView textView)

//百分比下载进度

PercentProgressDownloadListener(TextView textView, ProgressBar progressBar, long interval)

//具体数据下载进度

NumberProgressDownloadListener(TextView textView, ProgressBar progressBar, long interval)

//上述监听器都可以设置回调间隔时间

//主线程回调下载进度监听

MainThreadDownloadListener()

//主线程回调下载任务状态监听

MainThreadDownloadTaskListener()

欢迎各位提出bug和优化

android自定义rx库,Android下载库(OkHttp3+Retrofit2+RxJava2)相关推荐

  1. android 自定义dialog样式,Android 自定义dialog类

    首先定制style样式 styles.xml 加入自定义样式 @null true true true @color/transparent @color/transparent true 0.6 在 ...

  2. android 自定义输入法布局,Android自定义输入法使用方法

    Android自定义输入法使用方法 时间:2017-04-21     来源:Android开发学习网 对于Android用户而言,一般都会使用第三方的输入法.可是在输入密码时(尤其是支付相关的密码) ...

  3. Android 自定义本地图片加载库,仿微信相册

    总结一下微信的本地图片加载有以下几个特点,也是提高用户体验的关键点 1.缩略图挨个加载,一个一个加载完毕,直到屏幕所有缩略图都加载完成 2.不等当前屏的所有缩略图加载完,迅速向下滑,滑动停止时立即加载 ...

  4. android 自定义推流器,Android直播实现 Android端推流、播放

    最近想实现一个Android直播,但是对于这方面的资料都比较零碎,一开始是打算用ffmpeg来实现编码推流,在搜集资料期间,找到了几个强大的开源库,直接避免了jni的代码,集成后只用少量的java代码 ...

  5. android 自定义图片裁剪,Android图片裁剪工具封装

    笔者从零开始开发Android,而且是跳过java直接使用kotlin开发,这其中的好处是可以避开java这门传统语言诸多的潜规则,难处是相比资深Android开发者少了许多可以现用的工具库.比如An ...

  6. android自定义xml弹窗,Android自定义弹窗提醒控件使用详解

    Android中原生的Dialog弹窗提醒控件样式单一,有时候并不能满足我们的项目需求,而且一个工程里面有时候会在多处都用到弹窗提醒的功能,代码会出现大量的冗余,工作之余,就自己实现了这么一个弹窗提醒 ...

  7. android 自定义baseadapter listview,android之ListView和BaseAdapter的组合使用

    BaseAdapter是基本适配器,功能强大,凡是能用ArrayAdapter和SimpleAdapter解决的,都可以使用BaseAdapter解决. BaseAdapter是一个抽象类,所以需要自 ...

  8. android 自定义图片裁剪,android 自定义比例裁剪图片(拍照 相册)方式 自定义比例...

    先说下我这个有啥好处 主要是能够自定义设置裁剪图片的比例.比如 :今天产品 给你说裁剪 成16:9 的图片. 你做好了 OK 明天 产品又和你说 裁剪成10:7 的图片 ,你是不是要吐血, 我这里只要 ...

  9. android自定义滚动日期,Android基于wheelView实现自定义日期选择器

    本文实例为大家分享了Android实现自定义日期选择器的具体代码,供大家参考,具体内容如下 项目要求效果图: 要求 "6月20 星期五" 这一项作为一个整体可以滑动,"7 ...

  10. Android自定义View课程表,Android 自定义View课程表表格

    自己闲下来时间写的一个课表控件使用的自定义LinearLayout 里面View都是用代码实现的 最终效果如下图 写的可能有问题希望多多指点 创建一个自定义LinearLayout 控件用来装载课程的 ...

最新文章

  1. 备份软件 FreeFileSync 怎么用
  2. php和python写爬虫-python和php哪个更适合写爬虫
  3. 计算机编程结构类型,运城计算机编程内存的概念与结构类型
  4. 成功解决absl.flags._exceptions.UnrecognizedFlagError: Unknown command line flag 'data_format'
  5. solr文档索引最佳实践
  6. 如何自行查找SAP ERP的物料主数据和CRM产品主数据的映射关系
  7. mac 编译android系统,mac 编译 Android 系统杂记
  8. Web开发与设计之Google兵器谱-Web开发与设计利器
  9. POJ 计算几何专项训练(2) 【1269】【1410】【1696】【3347】【2826】
  10. 3.啊哈!算法 --- 一大波数正在靠近——枚举!很暴力
  11. visio 2003 怎么样画括号
  12. 语音转写(讯飞开放平台)工具类
  13. (二十六)树莓派3B+ 获取HMC5883L的磁场数据
  14. 「经济读物」经济学通识
  15. 论文阅读:Action Genome: Actions as Composition of Spatio-temporal Scene Graphs
  16. 计算机网络复习-第六章应用层
  17. 【2021牛客暑期多校训练营7 】 xay loves count
  18. tensorflow6-7
  19. HTTP协议状态码的含义
  20. MT6757_MT6763_Brightness_CaseShare

热门文章

  1. 技术债治理的三条原则
  2. Godot官网新闻翻译 - 2015年
  3. 揭开关于激光雷达传感器的常见误区——第二部分
  4. 帝国 php 7.0 默认 后台用户名及认证码,帝国CMS忘记后台登陆用户名 密码 认证码 安全提问答案 数据库用户名及密码的解决方法 | 坐倚北风...
  5. Vscode 附加进程调试
  6. JDK-8274609 JEP 421: Deprecate Finalization for Removal
  7. 多个路由器相连接的方式(以及配置成交换机的方式)
  8. Rhino 6 Essential Training Rhino6基本教程 Lynda课程中文字幕
  9. python 一元二次方程计算器
  10. GCC源码分析(摘)