android okhttp断点下载,OKHttp3实现的多线程断点下载库(FastDownLaoder)-程序员宅基地

技术标签: android okhttp断点下载  

基于Okhttp3, 结合Builder模式,加入多种设计模式,实现的android平台多线程下载利器!

功能

多线程多任务下载功能

基本的断点续传

下载数据持久,程序退出仍可以保留

支持视频,小说,文件,应用,文本多模式下载

支持通知栏下载进度同步更新

支持静默和非静默下载(静默一般用在插件下载需求中)

支持多种参数定制,文件名,存储路径定制功能

智能进行优先级下载,wifi自动恢复失败任务

提供进度回调,可实现自定义的操作效果

图片太大了 微信无法显示,来张我家妹子代替吧,不过瘾点击原文查看吧。

7beb8a6d34a35f7430dbf451a8f860c0.png

实践

依赖

gradle依赖远程maven包:

compile 'com.tamic.fastdownloader:Android-FastDownloader:1.0.0'

初始化

Application中初始化下载:

@Override

public void onCreate() {

super.onCreate();

DownloadInit.initDownload(getApplicationContext());

}

调用

simple 1:

new Download.Builder()

.url(url)

.build(this)

.start();

只要设置下载Url即可,文件名下载库会自动抓取, 默认优先级为中等,回调UI下载自动处理,默认的保存路径为:你的apk包名+ /tamic/downloads/ 下.

simple 2:

new Download.Builder()

.url("this is url")//下载url

.priority(Priority.HIGH)

.savepath("保存路径")

.isImplicit(false)//是否显示UI

.channel(3000)//渠道可选

.client(DLClientFactory.createClient(Type.NORMAL, this))//下载器

.setCallback(new DLCallback())//下载回调

.build(this)

.start();

这种配置 可定制下载的文件名,存储路径,优先级,以及渠道,是否显示通知栏更新UI等,并且回调可以自我实现,譬如下载完成后显示安装对话框等. 其实在初始化设下载库时可以指定最大下载数量,优先级。

高级API

重新开始下载

通过reStart()对已有的下载任务开始强制重新下载,将会删除已下载的缓存文件。

new Download.Builder()

.url(url)

.build(this)

.reStart();

下载Tag

可以通过tag(String) 设置下载ID

new Download.Builder()

.tag("key")

.url(url)

.build(this)

.Start();

如果不设置Tag,  默认:Url+当前系统时间, 如果你想获取默认的tag可以通过下面的列子,有了这个Tag你可以做暂停,取消等操作,感觉是不是想rxjava的那个flowable呢

String tag = new Download.Builder()

.url(url)

.client(DLClientFactory.createClient(NORMAL, this))

.build(this)

.start();

自定义回调

对某个下载任务进行操作可以单独加回调处理,使用setCallback,如果忽略不设置,系统则默认不处理。

new Download.Builder()

.setCallback(new IDLCallback() {

@Override

public void onStart(String key, long fileLength, long downloaded, String savePath, String filenNme) {

}

@Override

public void onSuccess(String key, long fileLength, long downloaded, String savePath, String filenNme, long aSpeed, String aAppiconName) {

}

@Override

public void onAppSuccess(String key, long fileLength, long downloaded, String savePath, String filenNme, long aSpeed, String aAppiconName, int downloadType, int appType) {

}

@Override

public void onFail(String key, long downloaded, String savePath, String filenNme, String aErrinfo) {

}

@Override

public void onCancel(String key, long fileLength, long downloaded, String savePath, String filenNme) {

}

@Override

public void onPause(String key, long fileLength, long downloaded, String savePath, String filenNme) {

}

@Override

public void onDownloading(String key, long fileLength, long downloadLength, long speed, String fileName, int downloadType) {

}

@Override

public void onRefresh(List infos) {

}

})

上面的回调包含了开始,下载,暂停 取消,完成,可以刷新等,有了这个回调接口你可以随意处理扩展你的业务,赶快下载试试吧!

项目地址

https://github.com/Tamicer/FastDownloader

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39766071/article/details/117543967

智能推荐

jquery $('#form1').serialize()序列化提交表单总结_$("form").serialize()-程序员宅基地

文章浏览阅读8k次,点赞3次,收藏8次。1、$("#form1").serialize() 把form表单的值序列化成一个字符串,如username=admin&password=admin123<form id="form1"> <input name="username" type="text" value="" /> <input name="password" type..._$("form").serialize()

android.util.SuperNotCalledException: Activity did not call through to super.onDestroy()异常的解决-程序员宅基地

文章浏览阅读6.5k次。今天项目调试过程中,遇到一个问题,点击跳转Activity之后,选好值返回上一页面的时候,发现项目闪退,反复试了好几次发现都是这个样子,也没有错误日志打印。找了半天断点调试,也只是走完onActivityResult就就闪退了。后来忽然想起来友盟里我集成了错误统计,去看看吧。一看发现还真有,原来是报了这个个异常android.util.SuperNotCalledException: Acti_android.util.supernotcalledexception

xterm.js + vue + websocket实现终端功能(xterm 3.x+xterm 4.x)-程序员宅基地

文章浏览阅读4w次,点赞36次,收藏114次。值得注意的是,在我们使用xterm实现仿终端功能时,不需要对输入字符进行判断,也不需要在输入事件中把输入的字符打出来。因为在输入事件中执行的web socket连接中,每输入一个字符都会自动传到后端,而后端会根据你输入的回车符来判断是否要为你换行及返回何种数据。所以我们只需要向后台传递参数就好。_xterm.js

ssh java_javaweb三大框架SSH-程序员宅基地

文章浏览阅读147次。1.MVC三层架构:模型层,控制层和视图层。模型层,用Hibernate框架让来JavaBean在数据库生成表及关联,通过对JavaBean的操作来 对数据库进行操作;控制层,用Struts框架来连接数据层和视图层的,接收、处理、发送数据并控制流程;视图层,用JSP模板把页面展现给用户以及提供 与用户的交互。而Spring框架粘合了Hibernate和Struts,透明的管理了整个架构,提供IOC..._ssh框架jsp和java

使用bootstrap制作搜索框_bootstrap搜索框模板-程序员宅基地

文章浏览阅读5.6w次,点赞12次,收藏26次。在项目开发过程中,我们或多或少都会使用到搜索选项,那么如何制作一个标准,好看的搜索框呢,这里推荐bootstrap自带的一个控件-input-group这个控件在bootstrap中文网上没有说明,所以需要去看官方的文档,地址在input-group先简单看下对于这个控件官方的说明Input groupEasily extend form controls by adding_bootstrap搜索框模板

Vertex Shader_too many combined image uniforms shader storag-程序员宅基地

文章浏览阅读1.4w次。一、Vertex Shader简介 前面一直有出现Vertex Shader,但Vertex Shader一直犹抱琵琶半遮面的感觉,本文将彻底揭开其面纱,看个清清楚楚、明明白折,以满足自己的好奇心。Vertex Shader在OpenGL ES 2.0的管道中的位置如下图所示: 本节将描述以下内容: 1)Vertex Shader的输入和输出_too many combined image uniforms shader storage buffers and fragment outputs cesium报错

随便推点

新浪实时股票数据接口http://hq.sinajs.cn/list=code_hq.sinajs.cn、-程序员宅基地

文章浏览阅读6.9w次,点赞17次,收藏59次。股票数据的获取目前有如下两种方法可以获取:1.http/javascript接口取数据2. web-service接口1.http/javascript接口取数据1.1Sina股票数据接口以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据接口:http://hq.sinajs.cn/list=sh601006这个url会返回一串_hq.sinajs.cn、

性能测试jmeter连接数据库jdbc(sql server举例)_jmeter压测 sql server-程序员宅基地

文章浏览阅读121次。2. 进入maven仓库-http://mvnrepository.com/,找到想要的工具包,比如我想要连接的是sql server数据库,就在搜索栏中搜索sql server,如果是mysql就搜mysql。B. 长期使用的话:放到JMeter的安装路径的lib目录下,就不需要引入了,使用时需要重启一次JMeter。3. 点击第一个搜索结果,下载最高的版本(高版本可以向下兼容,推荐高版本),点击Files下载jar包。2. 查看结果树:点击JDBC Request可以显示当前请求查到的所有值。_jmeter压测 sql server

[杂记] 感于近日 Linux 新闻_linux新闻-程序员宅基地

文章浏览阅读1.2k次。近日 Linux 业界最大的新闻莫过于 Ext4 的准备推出,这的确为 Linux 巩固了 WEB 服务器市场的份额,近日各大媒体报道 Linus Torvalds 向内核主支整合了大量文件系统 Ext4 的补丁,这一信号标志着下一个版本的 kernel2.6.28 中,Ext3 的后继者将脱离发展阶段,内核开发者最早是在 Linux2.6.19 中引入 Ext4 的早期版本。但这并不意味_linux新闻

关于集成支付宝SDK的开发_支付宝sdk需要安装web控件吗-程序员宅基地

文章浏览阅读7.5k次。下载首先,你要想找到这个SDK,都得费点功夫。现在的SDK改名叫移动支付集成开发包了,下载页面在 这里 的 “请点此下载集成开发包”Baidu和Googlep排在前面的支付宝开放平台,里面的SDK已经是2年前的版本了,而且还不支持64位架构。文档压缩包里有两个相关文档 :《支付宝钱包支付接口开发包2.0标准版.pdf》《支付宝钱包支付接口开发包2.0标准_支付宝sdk需要安装web控件吗

dubbo的高可用_dubbo性能为什么高-程序员宅基地

文章浏览阅读353次。存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。现象:zookeeper注册中心宕机,还可以消费dubbo暴露的服务。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。_dubbo性能为什么高

牛顿迭代法解非线性方程组_java解非线性方程组-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏26次。牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。_java解非线性方程组