JarvisDownloader

熟悉漫威电影的人都知道Jarvis,他是钢铁侠的智能管家,帮助钢铁侠制造装甲、分析大量数据、协助建模等各种智能工作,可惜在复联2中,Jarvis与灵魂宝石共同结合成Vision,钢铁侠失去了这位如亲人一般的智能AI,后来Tony用F.R.I.D.A.Y代替了Jarvis的工作,但从钢铁侠与Friday的互动来看,他只把Friday当做一般的AI,并没有投入如对待Jarvis的感情。

最近复联3上映,中国没有同步上映,真的太可惜了,五一本来还想过去香港看,但想到到时会人生人海还是算了,所以假期闲余时间就撸了个JarvisDownloader,之所以以Jarvis命名,也是因为我太喜欢Jarvis这个AI了,它属于人工智能的顶端啊!JarvisDownloader虽然没有Jarvis那么强大,但在下载文件方面,具备了很多的优点。

主要功能

  • 支持断点续传下载
  • 支持自定义文件夹路径、文件名。
  • 支持自定义SQLiteOpenHelper,用于保存下载进度等
  • 下载进度回调时自动切换到UI线程,方便更新UI。
  • 自动与activity绑定生命周期,无需手动释放
  • activity不可见时,不会更新UI,可见时会自动恢复状态
  • 支持查询下载历史列表
  • 自定义请求头

使用JarvisDownloader

依赖远程库

gradle

repositories {maven{url "https://jitpack.io"}
}dependencies {api 'com.github.yuwenque:JarvisDownloader:0.4.0'}复制代码

初始化数据库

Jarvis.init(new DefaultDownloadHistoryDBHelper(applicationContext));
复制代码

你也可以自定义一个继承于AbsDownloadHistoryDBHelper的管理类,用于保存下载进度等操作,详细操作请参考DefaultDownloadHistoryDBHelper

Jarvis.Downloader构建下载任务

请在activity或service中调用


//构成下载器
Jarvis.Downloader downloader = Jarvis.with(this).withUrl("http://pic1.win4000.com/wallpaper/2017-10-11/59dde2bca944f.jpg");//是否允许ui不可见时继续下载
downloader.allowBackgroundDownload(true);//多线程下载数量
downloader.threadCount(3);
//设置下载目录,非必须,默认目录为 Environment.getExternalStorageDirectory()+File.separator+"Jarvis"
downloader.filePath(Environment.getExternalStorageDirectory() + File.separator + "Jarvis");//设置文件名,非必须,但建议手动设置,默认为服务器文件的名字
downloader.fileName("test.jpg");//刷新进度的频率(毫秒),最小值为100
downloader.refreshTime(1000);//设置状态监听
//假如当前context为activity的话Jarvis已经自动帮你回调到主线程了,不需要调用activity.runOnUiThread
downloader.setDownloadListener(new DownloadListener() {/*** 文件下载完毕回调* @param file*/@Overridepublic void onSuccess(File file) {}/*** 进度回调* @param downloadedSize 当前下载的文件大小* @param progress 当前进度 0-1.0*/@Overridepublic void onProgress(long downloadedSize, float progress) {}/*** 开始下载时*/@Overridepublic void onStart() {}/*** 下载暂停时*/@Overridepublic void onPause() {}/*** 下载失败时*/@Overridepublic void onFail() {}/*** 被删除时* @param b 删除成功标志位*/@Overridepublic void onDelete(boolean b) {}
});//增加额外的请求头
downloader.addExtraRequestProperty("test-key","test-value");//多个请求头时,可添加map
Map<String,String> map = new HashMap<>();
map.put("test1","value1");
map.put("test2","value2");
downloader.addExtraRequestPropertyMap(map);//开始下载
downloader.download();//手动暂停
downloader.pause();//恢复下载
downloader.recovery();//手动删除本地记录,但不删除文件,文件下载过程中不允许删除
downloader.delete();//删除下载记录以及文件,文件下载过程中不允许删除
downloader.deleteCacheFile();//获取当前的下载状态
downloader.getDownloadState();//同步获取上次下载的进度,由于是查询数据库的操作,所以建议新开线程来获取
downloader.getDownloadedProgress();
//异步获取下载进度
downloader.getDownloadedProgress(new DataCallBack<Float>() {@Overridepublic void onData(Float progress) {}
});复制代码

上述代码也可以简化成以下形式

Jarvis.with(this).withUrl("http://pic1.win4000.com/wallpaper/2017-10-11/59dde2bca944f.jpg").allowBackgroundDownload(true).threadCount(3).filePath(Environment.getExternalStorageDirectory() + File.separator + "Jarvis").fileName("test.jpg").refreshTime(1000).setDownloadListener(listener).download();
复制代码

Jarvis管理下载任务


//异步获取下载历史记录,下载进度请自己计算
Jarvis.getInstance().getDownloadedList(new DataCallBack<List<LocalFileRecordBean>>() {@Overridepublic void onData(List<LocalFileRecordBean> localFileRecordBeans) {LocalFileRecordBean fileRecordBean=  localFileRecordBeans.get(0);//下载进度float progress = fileRecordBean.getDownloadedLength()*1.0f/fileRecordBean.getFileTotalLength();}
});//停止所有下载任务
Jarvis.getInstance().pauseAllDownloader();//开始所有下载任务
Jarvis.getInstance().startAllDownload();//删除所有下载任务及文件
Jarvis.getInstance().forceDeleteAll();//设置下载的线程池长度,如果当前有10个下载任务,
//每个任务开启3个线程进行断点续传下载,那么此时只设置20个的话,将有部分下载任务需等待其他线程执行完任务才能开始
Jarvis.getInstance().initThreadPoolLength(20);复制代码

源码阅读请跳转到https://github.com/yuwenque/JarvisDownloader

转载于:https://juejin.im/post/5ae821def265da0ba76f866f

Android断点续传下载器JarvisDownloader相关推荐

  1. 撸了个多线程断点续传下载器,我从中学习到了这些知识(附开源地址)

    2020年6月20日 上海张江 感谢看客老爷点进来了,周末闲来无事,想起同事强哥的那句话:"你有没有玩过断点续传?" 当时转念一想,断点续传下载用的确实不少,具体细节嘛,真的没有去 ...

  2. android图片下载器

    android图片下载器 页面布局 <span style="white-space:pre"> </span><TextViewandroid:la ...

  3. Android高速下载器实现思路——单个任务的提速与优化

    更新 更新了一下断点下载的实现部分,根据大家的评论做了一些更正和完善. 前言 最近过了金三银四的金三,顺利拿到了暑假实习生的offer.实习部门leader给我布置了入职前学习任务,强化多线程.数据库 ...

  4. android 自定义下载器,表盘自定义工具下载-表盘自定义工具 安卓版v4.1.0-pc6手机下载...

    表盘自定义工具是一款让你自己就能够轻松的实现对小米手环4的自定义软件,表盘自定义工具没有特别复杂的操作只需要你按照教程来一步步进行操作,即可像Apple Watch一样自定义的控制你小米手环的表盘.欢 ...

  5. android 自定义下载器,表盘自定义工具下载

    小米表盘自定义工具最新版适合购买了小米手环系列的用户来使用,这里有丰富的表盘壁纸和主题,支持自由切换,也可以自己diy表盘,还有非常多的资源包可供下载哦,让你的表盘变得与众不同,欢迎有需要的朋友下载使 ...

  6. Android通用简洁的下载器

    下载逻辑在android开发中可谓很常见,那么封装一个通用简洁的下载器时很有必要的.如果不想给工程引入一个很重的jar包那么可以直接复用下面的代码即可. 主要对外接口 构造函数 :     publi ...

  7. android 多线程下载,断点续传,线程池

    android 多线程下载,断点续传,线程池 你可以在这里看到这个demo的源码: https://github.com/onlynight/MultiThreadDownloader 效果图 这张效 ...

  8. 安卓day29网络编程 HttpClient AsyncHttpClient 断点续传多线程下载器 HttpUtils

    一.排坑 HttpClient.Header飘红 Android 6.0 已经移除了httpClient module下的build.gradle中加入: android{useLibrary 'or ...

  9. android 多线程断点续传下载

    今天跟大家一起分享下android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2次总结中已经为大家分享过有关技术的一些基 ...

最新文章

  1. Py之openpyxl:openpyxl库的简介、安装、使用方法之详细攻略
  2. [转]自用类库整理之SqlHelper和MySqlHelper
  3. 浅谈同步复位与异步复位
  4. win32 注册表操作
  5. android 缩放视图,当容器视图缩放为centerInside时,在android imageview中找到位图的位置...
  6. Greenplum创建存储过程
  7. linux 使用ssr客户端_webpack5.0+SSR尝鲜【排坑记录】
  8. 03:计算书费【一维数组】
  9. stringGrids 部分只读
  10. django模板变量直接显示html代码的问题
  11. linux python测试程序,linux下测试python程序执行时间
  12. samba服务器无法映射,ubuntu映射网络驱动器失败,以及samba服务
  13. 【Android】Android--Dialog
  14. 计算机创新创业选题参考,计算机及相关专创新创业教育指导书.doc
  15. 四步实现Grub4DOS引导img文件打造启动U盘
  16. 我国的离婚率现状,通过数据的可视化展示,来直观的展现给大家
  17. 1-初识C语言-C语言学习笔记来自比特鹏哥的资料
  18. Spring中AOP的Introductions使用介绍(五)
  19. 星际迷航7:未来之城
  20. java+poodle漏洞修复_如何修复 POODLE SSLv3 安全漏洞 (CVE-2014-3566)

热门文章

  1. 长春java开发能开多少钱,从理论到实践!
  2. gson和json-lib的区别
  3. 安卓编译php,编译PHP
  4. 计算机应用基础模块2客观题答案 文档,计算机应用基础网上形考答案模块2Word2010文字处理系统客观题答案.doc...
  5. 接收大文件流_一文搞定 Node.js 流 (Stream)
  6. 全局loading如何控制
  7. mysql explain ref列_mysql explain中的列
  8. java常用的网关有哪几种_拼多多java开发一面、二面合并面经
  9. Python安装OpenGL包
  10. mediacodec延时_FFmpeg优化点播延时方案