lingochamp /FileDownloader

Multitask、MultiThread(MultiConnection)、Breakpoint-resume、High-concurrency、Simple to use、Single/NotSingle-process

★ 11,129⑂ 2,200
JavaCreated 2015-12-22
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) {
            

Snapshot: 2026-11-10T09:35:25Z · Data license Apache-2.0 · JSON