file-downloader

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

  1. compile 'org.wlf:FileDownloader:0.3.1'

eclipse用户,可以在这里下载jar包: FileDownloader-0.3.1.jarFileDownloader-0.3.1-sources.jar

  • 第二步、在你的应用application的onCreate()中初始化FileDownloader

  1. // 1、创建Builder
  2. Builder builder = new FileDownloadConfiguration.Builder(this);
  3.  
  4. // 2.配置Builder
  5. // 配置下载文件保存的文件夹
  6. builder.configFileDownloadDir(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator +
  7. "FileDownloader");
  8. // 配置同时下载任务数量,如果不配置默认为2
  9. builder.configDownloadTaskSize(3);
  10. // 配置失败时尝试重试的次数,如果不配置默认为0不尝试
  11. builder.configRetryDownloadTimes(5);
  12. // 开启调试模式,方便查看日志等调试相关,如果不配置默认不开启
  13. builder.configDebugMode(true);
  14. // 配置连接网络超时时间,如果不配置默认为15秒
  15. builder.configConnectTimeout(25000);// 25秒
  16.  
  17. // 3、使用配置文件初始化FileDownloader
  18. FileDownloadConfiguration configuration = builder.build();
  19. FileDownloader.init(configuration);
  • 第三步、注册监听器(如果不需要监听,可以忽略),监听器是基于观察者模式设计的全局监听器,可以设置多个,记得在不需要的时候取消注册

  • -注册下载状态监听器(一般在fragment或activity的onCreate方法中注册,如果你使用service,请查看在Service中使用FileDownloader)
  1. private OnFileDownloadStatusListener mOnFileDownloadStatusListener = new OnSimpleFileDownloadStatusListener() {
  2. @Override
  3. public void onFileDownloadStatusRetrying(DownloadFileInfo downloadFileInfo, int retryTimes) {
  4. // 正在重试下载(如果你配置了重试次数,当一旦下载失败时会尝试重试下载),retryTimes是当前第几次重试
  5. }
  6. @Override
  7. public void onFileDownloadStatusWaiting(DownloadFileInfo downloadFileInfo) {
  8. // 等待下载(等待其它任务执行完成,或者FileDownloader在忙别的操作)
  9. }
  10. @Override
  11. public void onFileDownloadStatusPreparing(DownloadFileInfo downloadFileInfo) {
  12. // 准备中(即,正在连接资源)
  13. }
  14. @Override
  15. public void onFileDownloadStatusPrepared(DownloadFileInfo downloadFileInfo) {
  16. // 已准备好(即,已经连接到了资源)
  17. }
  18. @Override
  19. public void onFileDownloadStatusDownloading(DownloadFileInfo downloadFileInfo, float downloadSpeed, long
  20. remainingTime) {
  21. // 正在下载,downloadSpeed为当前下载速度,单位KB/s,remainingTime为预估的剩余时间,单位秒
  22. }
  23. @Override
  24. public void onFileDownloadStatusPaused(DownloadFileInfo downloadFileInfo) {
  25. // 下载已被暂停
  26. }
  27. @Override
  28. public void onFileDownloadStatusCompleted(DownloadFileInfo downloadFileInfo) {
  29. // 下载完成(整个文件已经全部下载完成)
  30. }
  31. @Override
  32. public void onFileDownloadStatusFailed(String url, DownloadFileInfo downloadFileInfo, FileDownloadStatusFailReason failReason) {
  33. // 下载失败了,详细查看失败原因failReason,有些失败原因你可能必须关心
  34.  
  35. String failType = failReason.getType();
  36. String failUrl = failReason.getUrl();// 或:failUrl = url,url和failReason.getType()会是一样的
  37.  
  38. if(FileDownloadStatusFailReason.TYPE_URL_ILLEGAL.equals(failType)){
  39. // 下载failUrl时出现url错误
  40. }else if(FileDownloadStatusFailReason.TYPE_STORAGE_SPACE_IS_FULL.equals(failType)){
  41. // 下载failUrl时出现本地存储空间不足
  42. }else if(FileDownloadStatusFailReason.TYPE_NETWORK_DENIED.equals(failType)){
  43. // 下载failUrl时出现无法访问网络
  44. }else if(FileDownloadStatusFailReason.TYPE_NETWORK_TIMEOUT.equals(failType)){
  45. // 下载failUrl时出现连接超时
  46. }else{
  47. // 更多错误....
  48. }
  49.  
  50. // 查看详细异常信息
  51. Throwable failCause = failReason.getCause();// 或:failReason.getOriginalCause()
  52.  
  53. // 查看异常描述信息
  54. String failMsg = failReason.getMessage();// 或:failReason.getOriginalCause().getMessage()
  55. }
  56. };
  57. FileDownloader.registerDownloadStatusListener(mOnFileDownloadStatusListener);
  • -注册文件数据变化监听器,监听比如文件不存在了,被删除了,状态变化了等任何与文件数据变化相关都会收到通知
  1. private OnDownloadFileChangeListener mOnDownloadFileChangeListener = new OnDownloadFileChangeListener() {
  2. @Override
  3. public void onDownloadFileCreated(DownloadFileInfo downloadFileInfo) {
  4. // 一个新下载文件被创建,也许你需要同步你自己的数据存储,比如在你的业务数据库中增加一条记录
  5. }
  6. @Override
  7. public void onDownloadFileUpdated(DownloadFileInfo downloadFileInfo, Type type) {
  8. // 一个下载文件被更新,也许你需要同步你自己的数据存储,比如在你的业务数据库中更新一条记录
  9. }
  10. @Override
  11. public void onDownloadFileDeleted(DownloadFileInfo downloadFileInfo) {
  12. // 一个下载文件被删除,也许你需要同步你自己的数据存储,比如在你的业务数据库中删除一条记录
  13. }
  14. };
  15. FileDownloader.registerDownloadFileChangeListener(mOnDownloadFileChangeListener);

下载状态监听器和文件数据变化监听器的主要区别在于,前者关心下载进度和错误(前端UI),后者关心文件数据变化(数据存储)

  • 第四步、下载文件和管理文件

  • -创建一个新下载
  1. FileDownloader.start(url);// 如果文件没被下载过,将创建并开启下载,否则继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
  • -创建一个自定义保存路径和文件名称的下载
  1. FileDownloader.detect(url, new OnDetectBigUrlFileListener() {
  2. @Override
  3. public void onDetectNewDownloadFile(String url, String fileName, String saveDir, long fileSize) {
  4. // 如果有必要,可以改变文件名称fileName和下载保存的目录saveDir
  5. FileDownloader.createAndStart(url, newFileDir, newFileName);
  6. }
  7. @Override
  8. public void onDetectUrlFileExist(String url) {
  9. // 继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
  10. FileDownloader.start(url);
  11. }
  12. @Override
  13. public void onDetectUrlFileFailed(String url, DetectBigUrlFileFailReason failReason) {
  14. // 探测一个网络文件失败了,具体查看failReason
  15. }
  16. });
  • -暂停下载
  1. FileDownloader.pause(url);// 暂停单个下载任务
  2. FileDownloader.pause(urls);// 暂停多个下载任务
  3. FileDownloader.pauseAll();// 暂停所有下载任务
  • -继续下载
  1. FileDownloader.start(url);// 继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
  • -移动下载文件
  1. FileDownloader.move(url, newDirPath, mOnMoveDownloadFileListener);// 移动单个下载文件到新文件夹中
  2. FileDownloader.move(urls, newDirPath, mOnMoveDownloadFilesListener);// 移动多个下载文件到新文件夹中
  • -删除下载文件
  1. FileDownloader.delete(url, true, mOnDeleteDownloadFileListener);// 删除单个下载文件
  2. FileDownloader.delete(urls, true, mOnDeleteDownloadFilesListener);// 删除多个下载文件
  • -重命名下载文件
  1. FileDownloader.rename(url, newName, true, mOnRenameDownloadFileListener);// 重命名一个下载文件
  • 第五步、取消注册的监听器

  • -取消注册下载状态监听器(一般在fragment或activity的onDestroy方法中取消注册)
  1. FileDownloader.unregisterDownloadStatusListener(mOnFileDownloadStatusListener);
  • -取消注册文件数据变化监听器
  1. FileDownloader.unregisterDownloadFileChangeListener(mOnDownloadFileChangeListener);

五、详细API文档

六、版本更新日志

欢迎加入QQ讨论群:479868413

开源安卓Http文件下载框架file-downloader的使用的更多相关文章

  1. android82 文件下载框架xUtils

    package com.itheima.xutils; import java.io.File; import com.lidroid.xutils.HttpUtils; import com.lid ...

  2. 国产开源JavaWeb应用程序框架——XWAF(1)

    XWAF是一个基于java反射和Servlet 技术的国产开源Web应用程序框架.其英文全称为“eXtensible Web Application Framework”,意即“可扩展的网络应用程序框 ...

  3. 介绍开源的.net通信框架NetworkComms框架 源码分析

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 售价249英镑 我曾经花了 ...

  4. 介绍开源的.net通信框架NetworkComms框架之二 传递类

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地 ...

  5. 【转】Dubbo是Alibaba开源的分布式服务框架

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...

  6. Facebook 开源安卓版 React Native,开发者可将相同代码用于网页和 iOS 应用开发

    转自:http://mt.sohu.com/20150915/n421177212.shtml Facebook 创建了React Java 库,这样,Facebook 的工程团队就可以用相同的代码给 ...

  7. Dubbo阿里Alibaba开源的分布式服务框架

    [获奖公布]"我的2016"主题征文活动    程序猿全指南,让[移动开发]更简单!      [观点]移动原生App开发和HTML 5开发,你更看好哪个?   博客的神秘功能 D ...

  8. 001---Hibernate简介( 开源O/R映射框架)

    该系列教程是使用hibernate3,hibernate4和3有区别(集成spring,使用等),请注意 001---Hibernate简介(开源O/R映射框架) ORM(Object Relatio ...

  9. 开源的.NET任务调度框架-HangFire

    什么是Hangfire Hangfire 是一个开源的.NET任务调度框架,目前1.6+版本已支持.NET Core.内置提供集成化的控制台,方便后台查看及监控: 另外,Hangfire包含三大核心组 ...

随机推荐

  1. 网络转载——java接口的概念

    为什么会出现接口? 接口的出现是为了扩展java中的类继承的单调性.这样使得功能更加丰富. 接口关键字? 定义接口interface,实现一个接口  implements 什么接口呢? 接口是一种特殊 ...

  2. grub的sol

    http://smcijohnny.blogspot.com/2015/06/linuxsolserial-over-lan.html https://www.hiroom2.com/2016/06/ ...

  3. 关于Hibernate XXX is not mapped 错误

    我的实体类是这么配置的 @Entity(name="EntityName")  //必须,name为可选,对应数据库中一的个表 就会出现 XXX is not mapped.   ...

  4. IDL数组计算

    函数 作用 min 最小值 max 最大值 total 求和 stddev 标准差 mean 平均值  

  5. "System Protection" is disabled in Win10 default settings

    We could find some important clue in Restore Point because "System Protection" of volume C ...

  6. php中cookie技术关于跨目录调用cookie值的问题

    今天做项目发现了一个奇葩错误,以cookie技术为主,反复测试发现cookie不能跨目录调用. 我在F:wamp\www\test\下面有1.php和2.php其中1.php接受2.php中setco ...

  7. mysql error: (2006, 'MySQL server has gone away')

    max_allowed_packet=16M wait_timeout= interactive_timeout = vim /etc/my.cnf  mysqld 中加入上面的内容.

  8. WINDOWS 远程桌面不能直接拷贝文件问题

    使用WIN7远程客户端连WIN 2003服务器,发现不能拷贝文件,使用下面方法解决:

  9. mysql实用操作

    1.查看某个表的建表语句 show create table thetable -- thetable为待查表名

  10. java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...