FileDownloader(https://github.com/wlfcolin/file-downloader)是本人开源的一个安卓Http文件下载框架,是根据自己的经验总结的一套非常轻量级的安卓通用Http文件下载管理器。我的目标是让文件下载越简单越好,尽可能以最简洁明了的方式完成复杂需求。亦可以查看github上的最新中文描述。

一、特点

多任务并行下载、自动断点续传、失败自动重试机制、支持大文件(超过2G)下载、强大方便的异常处理和异常恢复机制、轻松管理下载文件的生命周期(下载文件的增删改查)等。
二、非常适合的使用场景
1、需要多页面多方位同步下载进度和下载状态(比如商店APP,A页面开启点击下载,B页面和C页面也可以看到下载进度和暂停这个下载,而D页面 可以删除这个下载,无论哪个页面有操作,其它页面都会收到响应的回调进行更新,并且还可能还需要常驻一个service来把下载情况同步发送到通知栏的)
2、需要断点续传节约流量(比如做批量应用更新APP、单个应用自己更新下载新版本、做影视需要批量缓存视频的APP,做MP3歌曲下载APP)
3、专门做下载的(比如迅雷之类的APP,需要下载任何服务器上的东西,并且兼顾下载效率和开发效率的)

三、截图



四、快速上手使用

第一步、在项目模块的build.gradle配置gradle
compile ‘org.wlf:FileDownloader:0.3.1’
eclipse用户,可以在这里下载jar包: FileDownloader-0.3.1.jar, FileDownloader-0.3.1-sources.jar

第二步、在你的应用application的onCreate()中初始化FileDownloader
// 1、创建Builder
Builder builder = new FileDownloadConfiguration.Builder(this);

// 2.配置Builder
// 配置下载文件保存的文件夹
builder.configFileDownloadDir(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator +
“FileDownloader”);
// 配置同时下载任务数量,如果不配置默认为2
builder.configDownloadTaskSize(3);
// 配置失败时尝试重试的次数,如果不配置默认为0不尝试
builder.configRetryDownloadTimes(5);
// 开启调试模式,方便查看日志等调试相关,如果不配置默认不开启
builder.configDebugMode(true);
// 配置连接网络超时时间,如果不配置默认为15秒
builder.configConnectTimeout(25000);// 25秒

// 3、使用配置文件初始化FileDownloader
FileDownloadConfiguration configuration = builder.build();
FileDownloader.init(configuration);
第三步、注册监听器(如果不需要监听,可以忽略),监听器是基于观察者模式设计的全局监听器,可以设置多个,记得在不需要的时候取消注册
-注册下载状态监听器(一般在fragment或activity的onCreate方法中注册,如果你使用service,请查看在Service中使用FileDownloader)

private OnFileDownloadStatusListener mOnFileDownloadStatusListener = new OnSimpleFileDownloadStatusListener() {
@Override
public void onFileDownloadStatusRetrying(DownloadFileInfo downloadFileInfo, int retryTimes) {
// 正在重试下载(如果你配置了重试次数,当一旦下载失败时会尝试重试下载),retryTimes是当前第几次重试
}
@Override
public void onFileDownloadStatusWaiting(DownloadFileInfo downloadFileInfo) {
// 等待下载(等待其它任务执行完成,或者FileDownloader在忙别的操作)
}
@Override
public void onFileDownloadStatusPreparing(DownloadFileInfo downloadFileInfo) {
// 准备中(即,正在连接资源)
}
@Override
public void onFileDownloadStatusPrepared(DownloadFileInfo downloadFileInfo) {
// 已准备好(即,已经连接到了资源)
}
@Override
public void onFileDownloadStatusDownloading(DownloadFileInfo downloadFileInfo, float downloadSpeed, long
remainingTime) {
// 正在下载,downloadSpeed为当前下载速度,单位KB/s,remainingTime为预估的剩余时间,单位秒
}
@Override
public void onFileDownloadStatusPaused(DownloadFileInfo downloadFileInfo) {
// 下载已被暂停
}
@Override
public void onFileDownloadStatusCompleted(DownloadFileInfo downloadFileInfo) {
// 下载完成(整个文件已经全部下载完成)
}
@Override
public void onFileDownloadStatusFailed(String url, DownloadFileInfo downloadFileInfo, FileDownloadStatusFailReason failReason) {
// 下载失败了,详细查看失败原因failReason,有些失败原因你可能必须关心

    String failType = failReason.getType();String failUrl = failReason.getUrl();// 或:failUrl = url,url和failReason.getType()会是一样的if(FileDownloadStatusFailReason.TYPE_URL_ILLEGAL.equals(failType)){// 下载failUrl时出现url错误}else if(FileDownloadStatusFailReason.TYPE_STORAGE_SPACE_IS_FULL.equals(failType)){// 下载failUrl时出现本地存储空间不足}else if(FileDownloadStatusFailReason.TYPE_NETWORK_DENIED.equals(failType)){// 下载failUrl时出现无法访问网络}else if(FileDownloadStatusFailReason.TYPE_NETWORK_TIMEOUT.equals(failType)){// 下载failUrl时出现连接超时}else{// 更多错误....}// 查看详细异常信息Throwable failCause = failReason.getCause();// 或:failReason.getOriginalCause()// 查看异常描述信息String failMsg = failReason.getMessage();// 或:failReason.getOriginalCause().getMessage()
}

};
FileDownloader.registerDownloadStatusListener(mOnFileDownloadStatusListener);
-注册文件数据变化监听器,监听比如文件不存在了,被删除了,状态变化了等任何与文件数据变化相关都会收到通知

private OnDownloadFileChangeListener mOnDownloadFileChangeListener = new OnDownloadFileChangeListener() {
@Override
public void onDownloadFileCreated(DownloadFileInfo downloadFileInfo) {
// 一个新下载文件被创建,也许你需要同步你自己的数据存储,比如在你的业务数据库中增加一条记录
}
@Override
public void onDownloadFileUpdated(DownloadFileInfo downloadFileInfo, Type type) {
// 一个下载文件被更新,也许你需要同步你自己的数据存储,比如在你的业务数据库中更新一条记录
}
@Override
public void onDownloadFileDeleted(DownloadFileInfo downloadFileInfo) {
// 一个下载文件被删除,也许你需要同步你自己的数据存储,比如在你的业务数据库中删除一条记录
}
};
FileDownloader.registerDownloadFileChangeListener(mOnDownloadFileChangeListener);
下载状态监听器和文件数据变化监听器的主要区别在于,前者关心下载进度和错误(前端UI),后者关心文件数据变化(数据存储)

第四步、下载文件和管理文件
-创建一个新下载

FileDownloader.start(url);// 如果文件没被下载过,将创建并开启下载,否则继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
-创建一个自定义保存路径和文件名称的下载

FileDownloader.detect(url, new OnDetectBigUrlFileListener() {
@Override
public void onDetectNewDownloadFile(String url, String fileName, String saveDir, long fileSize) {
// 如果有必要,可以改变文件名称fileName和下载保存的目录saveDir
FileDownloader.createAndStart(url, newFileDir, newFileName);
}
@Override
public void onDetectUrlFileExist(String url) {
// 继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
FileDownloader.start(url);
}
@Override
public void onDetectUrlFileFailed(String url, DetectBigUrlFileFailReason failReason) {
// 探测一个网络文件失败了,具体查看failReason
}
});
-暂停下载

FileDownloader.pause(url);// 暂停单个下载任务
FileDownloader.pause(urls);// 暂停多个下载任务
FileDownloader.pauseAll();// 暂停所有下载任务
-继续下载

FileDownloader.start(url);// 继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
-移动下载文件

FileDownloader.move(url, newDirPath, mOnMoveDownloadFileListener);// 移动单个下载文件到新文件夹中
FileDownloader.move(urls, newDirPath, mOnMoveDownloadFilesListener);// 移动多个下载文件到新文件夹中
-删除下载文件

FileDownloader.delete(url, true, mOnDeleteDownloadFileListener);// 删除单个下载文件
FileDownloader.delete(urls, true, mOnDeleteDownloadFilesListener);// 删除多个下载文件
-重命名下载文件

FileDownloader.rename(url, newName, true, mOnRenameDownloadFileListener);// 重命名一个下载文件
第五步、取消注册的监听器
-取消注册下载状态监听器(一般在fragment或activity的onDestroy方法中取消注册)

FileDownloader.unregisterDownloadStatusListener(mOnFileDownloadStatusListener);
-取消注册文件数据变化监听器

FileDownloader.unregisterDownloadFileChangeListener(mOnDownloadFileChangeListener);
五、详细API文档

六、版本更新日志

开源安卓Http文件下载框架file-downloader的使用相关推荐

  1. 开源 Python网络爬虫框架 Scrapy

    开源 Python 网络爬虫框架 Scrapy:http://blog.csdn.net/zbyufei/article/details/7554322 介绍 所谓网络爬虫,就是一个在网上到处或定向抓 ...

  2. 十大开源安卓应用程序的开发框架

    此文章来源于:http://os.51cto.com/art/201602/505169.htm,点击打开链接. 本文介绍了十款与安卓兼容的最佳移动应用程序框架.为了满足我的要求,它们必须支持HTML ...

  3. 淘宝开源Android容器化框架Atlas开发者指南

    Atlas 由阿里巴巴移动团队自研,以容器化思路解决大规模团队协作问题,实现并行开发.快速迭代和动态部署,适用于 Android 4.x 以上系统版本的大小型 App 开发. 该框架于2017年3月1 ...

  4. 华为确认与三家EDA公司停止合作;开源安卓恶意软件窃取用户隐私信息;三星高通回应7纳米EUV工艺问题……...

    关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快.更全了解泛云圈精彩news g ...

  5. 腾讯优图开源深度学习推理框架 TNN,助力 AI 开发降本增效

    从学界到工业界,"开源"已经成为AI领域的一个关键词.一方面,它以"授人以渔"的方式为AI构建了一个开放共进的生态环境,帮助行业加速AI应用落地:另一方面,在解 ...

  6. kotlin android 开源,一款纯Kotlin编写的开源安卓应用 Smile

    原标题:一款纯Kotlin编写的开源安卓应用 "Smile" 本文作者 作者:王英豪 链接: http://blog.csdn.net/yhaolpz/article/detail ...

  7. 开源交换需新框架 技术团队也待整合

    博主Carlos Cardenas表示,考虑到Broadcom公司在市场的主导地位,开源交换的发展非常具有挑战性;博主Damian Huising最近则探讨了建立技术团队的最佳途径. 开源交换需要新框 ...

  8. C3F:首个开源人群计数算法框架

    C3F:首个开源人群计数算法框架 导读:52CV曾经报道多篇拥挤人群计数相关的技术,比如最近的: CVPR 2019 | 西北工业大学开源拥挤人群数据集生成工具,大幅提升算法精度 开源地址: http ...

  9. metasploit 一款开源的渗透测试框架

    渗透神器漏洞利用框架metasploit from: https://zhuanlan.zhihu.com/p/30743401 metasploit是一款开源的渗透测试框架软件也是一个逐步发展与成熟 ...

最新文章

  1. asp vb 插入,更新,删除数据库操作。
  2. HDU 2066 一个人的旅行
  3. 我的HTTP/3学习笔记
  4. CV:翻译并解读2019《A Survey of the Recent Architectures of Deep Convolutional Neural Networks》第一章~第三章
  5. 如何处理alert、confirm、prompt对话框
  6. PADS9.5详细安装步骤+安装包
  7. 安装完Oracle 11g之后启动SQL Developer 时报cannot find a j2se sdk错误的解决办法
  8. 【Transformer】PoolFormer: MetaFormer is Actually What You Need for Vision
  9. 巧用ActionFilterAttribute实现API日志的记录
  10. 【Android布局】控件布置
  11. allure-pytest 测试报告分享给大家
  12. CridView创建 实现选中,编辑,取消,删除
  13. 多功能图片处理器微信小程序源码下载一键多种处理照片
  14. Mac与Windows快捷键盘点
  15. 移动机器人运动控制算法入门
  16. CSS高级篇——渐变 (gradient)
  17. Java实现多重继承
  18. win10虚拟内存的设置
  19. WiFi探针的工作原理及采集的数据?
  20. GNU Binutils

热门文章

  1. 2019秋招求职攻略
  2. 导图解书-羁绊(01)《销讲成交策略》
  3. 【录用案例】1区SCI仅1个月14天录用,新增19篇录用、5篇见刊、6篇检索
  4. winform发布(应用程序自动更新)、不允许跳过升级
  5. Python有道翻译2.1版本爬虫实现
  6. C# winform 实习语音播报
  7. 优秀的人都将是孤独的
  8. 「题解」LeetCode 顺时针打印矩阵
  9. 2009-04-18一件很有成就感的事
  10. ApacheCN机器学习第二次线下活动