file-downloader

FileDownloader是安卓上轻量级Http/Https文件下载框架,我的目标是让安卓文件下载越简单越好,尽可能以最简洁明了的方式完成复杂需求。

一、特点

多任务并行下载、自动断点续传、失败自动重试机制、支持大文件(超过2G)下载、强大方便的异常处理和异常恢复机制、轻松管理下载文件的生命周期(下载文件的增删改查)等

二、非常适合的使用场景

1、需要多页面多方位同步下载进度和下载状态(比如商店APP,A页面开启点击下载,B页面和C页面也可以看到下载进度和暂停这个下载,而D页面 可以删除这个下载,无论哪个页面有操作,其它页面都会收到响应的回调进行更新,并且还可能还需要常驻一个service来把下载情况同步发送到通知栏的)

2、需要断点续传节约流量(比如做批量应用更新APP、单个应用自己更新下载新版本、做影视需要批量缓存视频的APP,做MP3歌曲下载APP)

3、专门做下载的(比如迅雷之类的APP,需要下载任何服务器上的东西,并且兼顾下载效率和开发效率的)

三、截图

四、快速上手使用

第一步、在项目模块的build.gradle配置gradle

compile 'org.wlf:FileDownloader:0.3.2'

第二步、在你的应用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.getUrl()会是一样的

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 API的简单使用)

-创建一个新下载

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);

七、旧版升级到最新版帮助说明

0.2.X --> 0.3.X

-建议替换用FileDownloader.detect(String, OnDetectBigUrlFileListener)替换掉FileDownloader.detect(String, OnDetectUrlFileListener),以支持超过2G的大文件下载。

-建议用DownloadFileInfo.getFileSizeLong()替换掉DownloadFileInfo.getFileSize(),用DownloadFileInfo.getDownloadedSizeLong()替换掉DownloadFileInfo.getDownloadedSize(),以便能正常显示超过2G文件的大小。

-建议用FileDownloader.registerDownloadStatusListener(OnSimpleFileDownloadStatusListener 或者 OnRetryableFileDownloadStatusListener)替换掉FileDownloader.registerDownloadStatusListener(OnFileDownloadStatusListener),以获得更好的体验。

-如果你注册了监听器,务必不要忘记在新版的合适时机取消注册unregisterDownloadStatusListener(OnFileDownloadStatusListener)和unregisterDownloadFileChangeListener(OnDownloadFileChangeListener),以防止不必要的内存泄露麻烦。

-所有以On开头的失败原因类(如:OnFileDownloadStatusFailReason)都替换成没有On开头的失败原因类(如:FileDownloadStatusFailReason)

0.1.X --> 0.3.X

-建议使用类FileDownloader替换掉类FileDownloadManager,同时对应的方法也替换掉。

-执行0.2.X --> 0.3.X中的说明。

九、编码规范,遵循谷歌安卓官方编码规范,同时要求参与的贡献者也遵循该规范

十、支持的系统版本:API 8及以上(安卓2.2及以上)

十二、LICENSE

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

欢迎加入QQ讨论群:479868413

filedownloader php,file-downloader相关推荐

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

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

  2. HtmlParser + HttpClient 实现爬虫

    简易爬虫的实现 HttpClient 提供了便利的 HTTP 协议访问,使得我们可以很容易的得到某个网页的源码并保存在本地:HtmlParser 提供了如此简便灵巧的类库,可以从网页中便捷的提取出指向 ...

  3. android文件下载器(轻量级)——EasyFileDownload

    EasyFileDownloader 一个用于android中的轻量级文件下载器,特别适合应用内升级下载APK. A lightweight for use in the android file d ...

  4. 聊聊 dotnet 7 对 bool 与字符串互转的底层性能优化

    本文也叫 跟着 Stephen Toub 大佬学性能优化系列.大家都知道在 .NET 7 有众多的性能优化,其中就包括了对布尔和字符串互转的性能优化.在对布尔和字符串的转换的性能优化上,有着非常巧妙的 ...

  5. 常用控件产品官方文档/手册/API列表 c#控件文档API列表 asp.net控件产品技术文档中文版...

    .netCHARTING报表图表控件 文档帮助手册  Ab3d.PowerToys 文档帮助手册  Ab3d.Reader3ds 文档帮助手册  ABViewer 文档帮助手册 (工程图纸文档管理系统 ...

  6. 正在从“vetur”获取代码操作_长时间运行 io.Reader 和 io.Writer 操作测算进度和估算剩余时间...

    每当我们在使用类似 io.Copy 和 ioutil.ReadAll 的工具时,比如我们正在从 http.Response 主体读入或者上传一个文件,我们会发现这些方法将一直堵塞,直到整个过程完成,哪 ...

  7. Magento 1.9.2 Unknown cipher in list: TLSv1

    Magento 無法更新與安裝 extension,這個問題會發生的情形,主要原因是, Magento 在版本 1.9.2.0 之後,預設要求 HTTPS 連線. 這個問題多半會發生在開發環境上,本機 ...

  8. 应用程序部署策略——虚拟机与容器

    目录 1.简介 2.部署用例 3.部署选项 3.1单服务器 3.2虚拟机 3.3容器 4.资源利用比较 5.虚拟机和容器的比较 6.结论 本文的范围是比较可用于我们的应用程序部署用例的各种部署模型.本 ...

  9. Java那些事之Log4j

    上次跟大家分享了java使用berkeley db.这一次,再跟大家分享一个开源组件,大名鼎鼎的log4j.这里需要首先声明一点,我在这里和大家分享的,都是我的个人实际经验,只是把我知道的东西尽可能多 ...

  10. streamlit + opencv/YOLOv3 快速构建自己的图像目标检测demo网页(七)

    文章目录 1 案例介绍 2 依赖安装 3 页面使用 4 源码细节解析 4.1 直接读入markdown文件 4.2 加载文件与图片 4.3 opencv + yolov3 检测函数 系列参考: pyt ...

最新文章

  1. BZOJ2843: 极地旅行社
  2. 7分钟理解JS的节流、防抖及使用场景
  3. F#基础教程 大纲
  4. java中的wn是什么意思_wnJava--做简捷的互动社区网站
  5. 逻辑代数01律的理解_零基础学习计算机原理:布尔逻辑和逻辑门
  6. html是一种描述的沙子语言,小学低年级语文阅读训练
  7. 数字图像处理 频率域平滑 MATLAB实验
  8. 95-38-035-Buffer-AbstractByteBuf
  9. Beetl 性能揭秘 1 :如何输出一个整型变量
  10. C语言——结构体数组的使用案例(如何判断两个矩形是否相交,其中一个是否包含在另外一个里面,点是否在矩形中)...
  11. OpenGL蓝宝书第五章代码勘误以及惯性坐标系去解释模型变换:Pyramid.cpp
  12. 第1-6课:绘制箱线图、饼图和直方图
  13. Windows 10配置远程开机
  14. Ubuntu 分卷压缩
  15. SpringBoot+WebSocket问题:Failed to register @ServerEndpoint class
  16. 编译hostapd时,出现错误:/usr/bin/ld: cannot find -lnl
  17. 制作一个用户头像选择器仿 WeGame
  18. Mybatis——mapper.xml中常用的SQL相关标签简介
  19. Web音视频入门系列——音视频基础知识
  20. 匹兹堡计算机科学公司,UPitt的CS「匹兹堡大学计算机科学系」

热门文章

  1. 2008年度技术奥斯卡大奖:The Crunchies 2008 现场报导
  2. China Mobile 移动
  3. matlab quiver一维矢量图,Matlab quiver函数用法 - 画矢量箭头图
  4. 生产环境容器落地最佳实践 - JFrog 内部 K8s 落地旅程
  5. 计算机联锁控制系统的软件应具备信号操作功能,车站信号计算机联锁控制系统—软件.ppt...
  6. 22个应届生word简历模板
  7. 万字长文讲述由ChatGPT反思大语言模型的技术精要
  8. 【老生谈算法】matlab实现Kruskal避圈算法求最小生成树——Kruskal避圈算法
  9. matlab中关于双重积分的问题
  10. “能找到工作,全靠我简历造假”