android自定义rx库,Android下载库(OkHttp3+Retrofit2+RxJava2)
最近封装了一个基于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)相关推荐
- android 自定义dialog样式,Android 自定义dialog类
首先定制style样式 styles.xml 加入自定义样式 @null true true true @color/transparent @color/transparent true 0.6 在 ...
- android 自定义输入法布局,Android自定义输入法使用方法
Android自定义输入法使用方法 时间:2017-04-21 来源:Android开发学习网 对于Android用户而言,一般都会使用第三方的输入法.可是在输入密码时(尤其是支付相关的密码) ...
- Android 自定义本地图片加载库,仿微信相册
总结一下微信的本地图片加载有以下几个特点,也是提高用户体验的关键点 1.缩略图挨个加载,一个一个加载完毕,直到屏幕所有缩略图都加载完成 2.不等当前屏的所有缩略图加载完,迅速向下滑,滑动停止时立即加载 ...
- android 自定义推流器,Android直播实现 Android端推流、播放
最近想实现一个Android直播,但是对于这方面的资料都比较零碎,一开始是打算用ffmpeg来实现编码推流,在搜集资料期间,找到了几个强大的开源库,直接避免了jni的代码,集成后只用少量的java代码 ...
- android 自定义图片裁剪,Android图片裁剪工具封装
笔者从零开始开发Android,而且是跳过java直接使用kotlin开发,这其中的好处是可以避开java这门传统语言诸多的潜规则,难处是相比资深Android开发者少了许多可以现用的工具库.比如An ...
- android自定义xml弹窗,Android自定义弹窗提醒控件使用详解
Android中原生的Dialog弹窗提醒控件样式单一,有时候并不能满足我们的项目需求,而且一个工程里面有时候会在多处都用到弹窗提醒的功能,代码会出现大量的冗余,工作之余,就自己实现了这么一个弹窗提醒 ...
- android 自定义baseadapter listview,android之ListView和BaseAdapter的组合使用
BaseAdapter是基本适配器,功能强大,凡是能用ArrayAdapter和SimpleAdapter解决的,都可以使用BaseAdapter解决. BaseAdapter是一个抽象类,所以需要自 ...
- android 自定义图片裁剪,android 自定义比例裁剪图片(拍照 相册)方式 自定义比例...
先说下我这个有啥好处 主要是能够自定义设置裁剪图片的比例.比如 :今天产品 给你说裁剪 成16:9 的图片. 你做好了 OK 明天 产品又和你说 裁剪成10:7 的图片 ,你是不是要吐血, 我这里只要 ...
- android自定义滚动日期,Android基于wheelView实现自定义日期选择器
本文实例为大家分享了Android实现自定义日期选择器的具体代码,供大家参考,具体内容如下 项目要求效果图: 要求 "6月20 星期五" 这一项作为一个整体可以滑动,"7 ...
- Android自定义View课程表,Android 自定义View课程表表格
自己闲下来时间写的一个课表控件使用的自定义LinearLayout 里面View都是用代码实现的 最终效果如下图 写的可能有问题希望多多指点 创建一个自定义LinearLayout 控件用来装载课程的 ...
最新文章
- 备份软件 FreeFileSync 怎么用
- php和python写爬虫-python和php哪个更适合写爬虫
- 计算机编程结构类型,运城计算机编程内存的概念与结构类型
- 成功解决absl.flags._exceptions.UnrecognizedFlagError: Unknown command line flag 'data_format'
- solr文档索引最佳实践
- 如何自行查找SAP ERP的物料主数据和CRM产品主数据的映射关系
- mac 编译android系统,mac 编译 Android 系统杂记
- Web开发与设计之Google兵器谱-Web开发与设计利器
- POJ 计算几何专项训练(2) 【1269】【1410】【1696】【3347】【2826】
- 3.啊哈!算法 --- 一大波数正在靠近——枚举!很暴力
- visio 2003 怎么样画括号
- 语音转写(讯飞开放平台)工具类
- (二十六)树莓派3B+ 获取HMC5883L的磁场数据
- 「经济读物」经济学通识
- 论文阅读:Action Genome: Actions as Composition of Spatio-temporal Scene Graphs
- 计算机网络复习-第六章应用层
- 【2021牛客暑期多校训练营7 】 xay loves count
- tensorflow6-7
- HTTP协议状态码的含义
- MT6757_MT6763_Brightness_CaseShare
热门文章
- 技术债治理的三条原则
- Godot官网新闻翻译 - 2015年
- 揭开关于激光雷达传感器的常见误区——第二部分
- 帝国 php 7.0 默认 后台用户名及认证码,帝国CMS忘记后台登陆用户名 密码 认证码 安全提问答案 数据库用户名及密码的解决方法 | 坐倚北风...
- Vscode 附加进程调试
- JDK-8274609 JEP 421: Deprecate Finalization for Removal
- 多个路由器相连接的方式(以及配置成交换机的方式)
- Rhino 6 Essential Training Rhino6基本教程 Lynda课程中文字幕
- python 一元二次方程计算器
- GCC源码分析(摘)