如果你觉得这个lib对你有用,随手给个Star,让我知道它是对你有帮助的,我会继续更新和维护它。
- 任何一个界面检测进度
- 单个任务下载
- 多个任务下载
- 取消单个任务
- 取消全部任务
- 暂停所有任务
- 支持队列
- 队列最大同时下载任务数,超过则进入等待队列
- 自动恢复上一次下载任务
<uses-permission android:name="android.permission.INTERNET"/>
根项目的build.gradle:
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
implementation 'com.j256.ormlite:ormlite-android:4.48'
implementation 'com.xwdz:QuietDownloader:$lastVersion'
1. 在您的Application处调用初始化代码:
DownloadConfig downloadConfig = new DownloadConfig(this);
// 自定义配置 均有默认值
// downloadConfig.setMaxDownloadTasks(); 队列最大同时下载任务数,超过则进入等待队列 默认:3
// downloadConfig.setMaxDownloadThreads() 最大线程下载数 默认:3
// downloadConfig.setDownloadDir() 下载文件路径
...省略若干
QuietDownloader.initializeDownloader(downloadConfig);
状态 | 说明 |
---|---|
IDLE |
空闲 |
WAITING |
等待 |
CONNECTING |
连接 |
CONNECT_SUCCESSFUL |
连接成功 |
DOWNLOADING |
开始下载 |
PAUSED |
暂停 |
CANCELLED |
取消 |
COMPLETED |
完成 |
ERROR |
发生错误 |
private final DownloadEntry downloadEntry = new DownloadEntry("url","name");
QuietDownloader.download(downloadEntry)
... 省略代码
常用静态方法 | 参数 | 说明 |
---|---|---|
download |
downloadEntry | 下载一个任务 |
pause |
downloadEntry | 在听一个任务 |
cancel |
downloadEntry | 取消一个任务 |
resume |
downloadEntry | 恢复一个下载任务 |
recoverAll |
无 | 恢复所有下载任务 |
pauseAll |
无 | 暂停所有任务 |
queryAll |
无 | 查询所有下载任务返回一个list |
queryById |
id | 查询一个downloadEntry 从数据库中 |
deleteById |
id | 从数据库中删除一个downloadEntry |
getDBDao |
无 | 返回Dao<DownloadEntry, String> 自定义进行数据查询 |
......
QuietDownloader
并没有采用传统listener方式,而是使用了观察者模式,如需要在某个界面监听下载进度
private final DataUpdatedWatcher mDataUpdateReceiver = new DataUpdatedWatcher() {
@Override
public void notifyUpdate(DownloadEntry entry) {
// calback mainUIThread
// do something
// 可根据 entry status来判断一些列状态
if(entry.status == DownloadEntry.pause || DownloadEntry.downloading ...)
}
};
// 省略若干代码
//监听下载状态
@Override
protected void onResume() {
super.onResume();
QuietDownloader.addObserver(mDataUpdateReceiver);
}
@Override
protected void onPause() {
super.onPause();
QuietDownloader.removeObserver(mDataUpdateReceiver);
}
public class DownloadEntry implements Serializable {
public String id;
public String name;
public String url;
public int currentLength;
public int totalLength;
// ... 省略代码
/**
* @param url 下载地址
* @param name 文件名称(带后缀)
*/
public DownloadEntry(String url, String name) {
this.url = url;
this.id = url;
this.name = name;
this.filePath = QuietDownloader.getImpl().getConfigs().getDownloadFile(name).getAbsolutePath();
}
// ... 省略代码
@Override
public boolean equals(Object o) {
return o.hashCode() == this.hashCode();
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + id.hashCode();
return result;
}
}
DownloadEntry
实体类重写其 equals 以及 hashCode 方法,使用其 id hashCode 来作为其标准QuietDownloader
内部使用DownloadEntry实体类进行关联QuietDownEntry
的name
属性最终作为下载文件名称- 如果自定义了
downloadConfig.setDownloadDir()
下载位置注意申请读写权限
- 重试机制
- 拦截器实现
- 不再需要声明组件Service
- 初始化直接可使用静态方法`QuietDownloader.initializeDownloader(downloadConfig);
- 增加自动重试机制
- 内部增加检查当前
DownloadEntry.status
机制,如果正在下载则忽略事件 - HTTP增加
Connect Header
- 新增配置
QuietDownloader.setReadTimeoutMillis()
,QuietDownloader.setConnTimeMillis
DownloadConfig
提供自定义下载目录- Fix Issues3
QuietDownloader
可通过getDBDao()
拿到Dao<DownloadEntry, String>
对象操作数据库QuietDownloader
提供查询所有方法数据库DownloadEntryqueryAll()
- 修复默认使用url作为文件名称url长度过长问题
- 新增DownloadStatus连接成功
CONNECT_SUCCESSFUL
枚举