lingochamp /FileDownloader
Multitask、MultiThread(MultiConnection)、Breakpoint-resume、High-concurrency、Simple to use、Single/NotSingle-process
★ 11,129⑂ 2,200
11,129
stars
+-2+-2+0
2,200
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions
README
FileDownloader
Android 文件下载引擎,稳定、高效、灵活、简单易用
[![Gitter][gitter_svg]][gitter_url]
[![Download][bintray_svg]][bintray_url]
![][file_downloader_svg]
[![Build Status][build_status_svg]][build_status_link]
[![][filedownloader_snapshot_svg]](https://oss.sonatype.org/content/repositories/snapshots/com/liulishuo/filedownloader/)
README DOC
---
版本迭代日志: Change Log
英文文档: Wiki、优化建议
---
FileDownloader2
现在, FileDownloader2-OkDownload 已经正式发布, okdownload继承了所有FileDownloader的优点,甚至做了更多的优化以及更多的特性。
由于FileDownloader的单元测试覆盖太低,因此所有的进一步的需求以及提高都将会在okdownload上进行实现而非FileDownloader,而FileDownloader本身将只会关注于修复Bug。
---
特点
- 简单易用
- 单任务多线程/多连接/分块下载(并支持通过ConnectionCountAdapter定制)
- 高并发
- 灵活
- 可选择性支持: 独立/非独立进程
- 自动断点续传
需要注意
- 当下载的文件大小可能大于1.99GB(2^31-1=2_147_483_647 = 1.99GB)的时候, 请使用FileDownloadLargeFileListener而不是FileDownloadListener(同理使用getLargeFileSofarBytes()与getLargeFileTotalBytes())
- 暂停: paused, 恢复: 直接调用start,默认就是断点续传
- 引擎默认会打开避免掉帧的处理(使得在有些情况下回调(FileDownloadListener)不至于太频繁导致ui线程被ddos), 如果你希望关闭这个功能(关闭以后,所有回调会与0.1.9之前的版本一样,所有的回调会立马抛一个消息ui线程(Handler))
- 如果没有特殊需要,直接通过配置filedownloader.properties将process.non-separate置为true,可以有效减少每次回调IPC带来的I/O。
---
Android 系统适配
适配 Android 8.0
从 Android 8.0 开发,后台服务的限制增强了,可以参考这里了解更多信息。
因此,自 FileDownloader 1.7.6 版本开始, Android 8.0 及之后的系统上,如果在后台启动下载服务,这个服务将会是一个前台服务,同时你会看到一个标题为 "FileDownloader" 的通知。
你可以参考这里去自定义通知的内容。
适配 Android 9.0
从 Android 9.0 (API level 28) 开始,明文请求默认被禁止,你可以在这里了解详细信息。
FileDownloader 1.7.6 已经在 demo 中处理了此问题。
根据迁移笔记,FOREGROUND_SERVICE 这个权限已经在 1.7.6 版本添加到 library 的 manifest 里面了。
---
欢迎提交 Pull requests
- 尽量多的英文注解。
- 每个提交尽量的细而精准。
- Commit message 遵循: AngularJS's commit message convention。
---
I. 效果
![][single_demo_gif]
![][chunked_demo_gif]
![][serial_tasks_demo_gif]
![][parallel_tasks_demo_gif]
![][tasks_manager_demo_gif]
![][mix_tasks_demo_gif]
![][avoid_drop_frames_1_gif]
![][avoid_drop_frames_2_gif]
II. 使用
在项目中引用:
groovy
implementation 'com.liulishuo.filedownloader:library:1.7.7'
如果是eclipse引入jar包参考: 这里
如果需要引入snapshot版本,请添加sonatype的仓库:
groovy
repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
全局初始化
如果你需要注册你的定制组件,你需要在ApplicationonCreate中调用FileDownloader.setupOnApplicationOnCreate(application):InitCustomMaker, 否则你只需要在使用FileDownloader之前的任意时候调用FileDownloader.setup(Context)即可。
这些初始化方法都十分的简单,不会启动下载服务,一般都是在10ms内完成。
启动单任务下载
java
FileDownloader.getImpl().create(url)
.setPath(path)
.setListener(new FileDownloadListener() {
@Override
protected void pending(BaseDownloadTask task, int soFarBytes, int totalBytes) {
}
@Override
protected void connected(BaseDownloadTask task, String etag, boolean isContinue, int soFarBytes, int totalBytes) {
}
@Override
protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) {
}
@Override
protected void blockComplete(BaseDownloadTask task) {