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

compile 'org.wlf:FileDownloader:0.3.1'

eclipse用户,可以在这里下载jar包: FileDownloader-0.3.1.jarFileDownloader-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文档

六、版本更新日志

欢迎加入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. JS判断input按了回车键

    参考代码如下: <input type="textbox" id="textbox1" onkeypress="CheckInfo" ...

  2. php学习笔记

    header("Content-Type:text/html;charset=utf-8");//设置中文请求中文 $host = "localhost";// ...

  3. 查找jsp页面报错技巧

    在报错跳转页面打印错误信息<div>系统执行发生错误,信息描述如下:</div> <div>错误状态代码是:${pageContext.errorData.stat ...

  4. Windows下安装Nginx反向代理服务器

    一,首先到 Nginx官方网站下载最新版本,下载网址: http://nginx.org/en/download.html 二,解压ZIP包,目录修改为nginx.放置在D盘根目录下,也可以放置在其它 ...

  5. listview侧滑菜单swipemenulistview的简单使用

    先看代码: public class MainActivity extends AppCompatActivity { private SwipeMenuListView list; private ...

  6. Maven本地仓库及远程仓库

    转载自:http://blog.csdn.net/wanghantong/article/details/36427433 Maven 仓库的分类: maven的仓库只有两大类:1.本地仓库 2.远程 ...

  7. prolog 规则

    规则 规则由几个互相依赖的简单句(谓词)组成.用来描述事实之间的依赖关系,如:因果关系,蕴含关系,对应关系 规则的实质就是存储起来得查询 其语法结构如下: head:-body head 为谓词的定义 ...

  8. 打水印 Imagename_biao是水印文件 ImgName是原图

    /** * 打水印 Imagename_biao是水印文件 ImgName是原图 * @param Imagename_biao * @param ImgName */ public static v ...

  9. s5pv210中断体系

    一.什么是中断? 1.中断的发明是用来解决宏观上的并行需要的.宏观就是从整体上来看,并行就是多件事情都完成了. 2.微观上的并行,就是指的真正的并行,就是精确到每一秒甚至每一刻,多个事情都是在同时进行 ...

  10. centos7.2下编译安装&&使用-git代码库

    centos7.2下编译安装git Git简介 Git是一个分布式版本控制系统 Git vs SVN SVN是典型的集中式版本控制起,版本库集中存放在服务器,当我们用自己的电脑干活儿的时候,需要先从中 ...