继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android下载库(OkHttp3+Retrofit2+RxJava2)

青春有我
关注TA
已关注
手记 1199
粉丝 205
获赞 1008

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

  • 断点续传

  • 多任务

  • 数据库存储


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

webp

preview.gif


嗯。大概就是这鸟样子。有要吐槽UI的,请你安静点,请你安静点,耶~
可能因为服务器和模拟器是同一台电脑,所以速度比较快。。。
下面是重点


//核心库implementation 'eason.linyuzai:eason-download:1.0.1'//如有需要可以添加额外的监听器implementation 'eason.linyuzai:eason-download-listeners:1.0.1'

然后是最简单的用法

//可以当成Http ClientELoad eload = ELoad.Builder(Context context).build();//可以当成一个RequestDownloadTask 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<String, String> 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<DownloadTaskEntity> entities = eload.loadTaskEntitiesFromDatabase()//将保存的任务记录重新生成DownloadTaskDownloadTask 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);//回收,可以在任务未开始,完成,异常,取消的状态时回收,复用OkHttpClientDownloadTask.recycle();

DownloadTask属性

//获得DownloadTaskEntityDownloadTaskEntity getEntity();//running状态时,下载总进度long getDownloadBytesTemp();//是否是空闲状态boolean isIdle();//是否是准备状态boolean isAttach();//是否是下载状态boolean isRunning();//是否是暂停状态boolean isPause();//是否完成boolean isFinish();//是否异常boolean isError();//是否取消boolean isCancel();

DownloadTaskEntity属性

//TaskIdString getTaskId();//创建时间long getCreateTime();//执行状态int getState();//http(s) HeadersMap<String, String> getHeaders();//UrlString getUrl();//URLDecoderString 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()



作者:淋雨仔
链接:https://www.jianshu.com/p/77b48f0f647d


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP