下载任务组

pull/330/head
AriaLyy 7 years ago
parent 489f44c0f9
commit 5ebe94c905
  1. 8
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java
  2. 15
      Aria/src/main/java/com/arialyy/aria/core/upload/ProxyHelper.java
  3. 6
      Aria/src/main/java/com/arialyy/aria/core/upload/UploadReceiver.java
  4. 58
      README.md
  5. 2
      build.gradle
  6. BIN
      img/download_group.gif

@ -90,10 +90,10 @@ public class DownloadReceiver extends AbsReceiver {
String className = obj.getClass().getName();
Set<String> dCounter = ProxyHelper.getInstance().downloadCounter;
Set<String> dgCounter = ProxyHelper.getInstance().downloadGroupCounter;
if (dCounter.contains(className)) {
if (dCounter != null && dCounter.contains(className)) {
DownloadSchedulers.getInstance().register(obj);
}
if (dgCounter.contains(className)) {
if (dgCounter != null && dgCounter.contains(className)) {
DownloadGroupSchedulers.getInstance().register(obj);
}
return this;
@ -106,10 +106,10 @@ public class DownloadReceiver extends AbsReceiver {
String className = obj.getClass().getName();
Set<String> dCounter = ProxyHelper.getInstance().downloadCounter;
Set<String> dgCounter = ProxyHelper.getInstance().downloadGroupCounter;
if (dCounter.contains(className)) {
if (dCounter != null && dCounter.contains(className)) {
DownloadSchedulers.getInstance().unRegister(obj);
}
if (dgCounter.contains(className)) {
if (dgCounter != null && dgCounter.contains(className)) {
DownloadGroupSchedulers.getInstance().unRegister(obj);
}
}

@ -51,9 +51,18 @@ public class ProxyHelper {
Method downloadGroup = clazz.getMethod("getDownloadGroupCounter");
Method upload = clazz.getMethod("getUploadCounter");
Object object = clazz.newInstance();
downloadCounter = unmodifiableSet((Set<String>) download.invoke(object));
downloadGroupCounter = unmodifiableSet((Set<String>) downloadGroup.invoke(object));
uploadCounter = unmodifiableSet((Set<String>) upload.invoke(object));
Object dc = download.invoke(object);
if (dc != null) {
downloadCounter = unmodifiableSet((Set<String>) dc);
}
Object dgc = downloadGroup.invoke(object);
if (dgc != null) {
downloadGroupCounter = unmodifiableSet((Set<String>) dgc);
}
Object uc = upload.invoke(object);
if (uc != null) {
uploadCounter = unmodifiableSet((Set<String>) uc);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {

@ -123,8 +123,8 @@ public class UploadReceiver extends AbsReceiver<UploadEntity> {
*/
public UploadReceiver register() {
String className = obj.getClass().getName();
Set<String> dCounter = ProxyHelper.getInstance().uploadCounter;
if (dCounter.contains(className)) {
Set<String> cCounter = ProxyHelper.getInstance().uploadCounter;
if (cCounter != null && cCounter.contains(className)) {
UploadSchedulers.getInstance().register(obj);
}
return this;
@ -133,7 +133,7 @@ public class UploadReceiver extends AbsReceiver<UploadEntity> {
@Override public void unRegister() {
String className = obj.getClass().getName();
Set<String> dCounter = ProxyHelper.getInstance().uploadCounter;
if (dCounter.contains(className)) {
if (dCounter != null && dCounter.contains(className)) {
UploadSchedulers.getInstance().unRegister(obj);
}
}

@ -1,6 +1,6 @@
# Aria
![图标](https://github.com/AriaLyy/DownloadUtil/blob/v_2.0/app/src/main/res/mipmap-hdpi/ic_launcher.png)</br>
Aria项目源于15年工作中遇到的一个文件下载管理的需求,当时被下载折磨的痛不欲生,从那时起便萌生了编写一个简单易用,稳当高效的下载框架,aria经历了1.0到3.0的开发,算是越来越接近当初所制定的目标了。
Aria项目源于工作中遇到的一个文件下载管理的需求,当时被下载折磨的痛不欲生,从那时起便萌生了编写一个简单易用,稳当高效的下载框架,aria经历了1.0到3.0的开发,算是越来越接近当初所制定的目标了。
Aria有以下特点:
+ 简单、方便
@ -11,6 +11,7 @@ Aria有以下特点:
- [一句代码就可以动态设置最大下载数](#代码中设置参数)
- [通过修改配置文件很容易就能修改下载线程数](#配置文件设置参数)
- [优先下载某一个任务](#常用接口)
- [支持任务组下载,多个任务可共享一个progress](#一组任务下载)
+ 支持https地址下载
- 在配置文件中很容易就可以设置CA证书的信息
+ 支持300、301、302重定向下载链接下载
@ -27,13 +28,14 @@ Aria怎样使用?
[![Download](https://api.bintray.com/packages/arialyy/maven/AriaApi/images/download.svg)](https://bintray.com/arialyy/maven/AriaApi/_latestVersion)
[![Download](https://api.bintray.com/packages/arialyy/maven/AriaCompiler/images/download.svg)](https://bintray.com/arialyy/maven/AriaCompiler/_latestVersion)
```java
compile 'com.arialyy.aria:aria-core:3.1.9'
annotationProcessor 'com.arialyy.aria:aria-compiler:3.1.9'
compile 'com.arialyy.aria:aria-core:3.2.6'
annotationProcessor 'com.arialyy.aria:aria-compiler:3.2.6'
```
## 示例
![多任务下载](https://github.com/AriaLyy/DownloadUtil/blob/master/img/download_img.gif)
![上传](https://github.com/AriaLyy/DownloadUtil/blob/master/img/sing_upload.gif)
![下载任务组](https://github.com/AriaLyy/DownloadUtil/blob/master/img/download_group.gif)
## 性能
![性能展示](https://github.com/AriaLyy/DownloadUtil/blob/master/img/performance.png)
@ -48,15 +50,8 @@ annotationProcessor 'com.arialyy.aria:aria-compiler:3.1.9'
```
## 使用Aria进行下载
* 添加任务(不进行下载),当其他下载任务完成时,将自动下载等待中的任务
```java
Aria.download(this)
.load(DOWNLOAD_URL)
.setDownloadPath(DOWNLOAD_PATH) //文件保存路径
.add();
```
* 下载
### 普通任务下载
* 下载\恢复下载
```java
Aria.download(this)
@ -69,15 +64,33 @@ annotationProcessor 'com.arialyy.aria:aria-compiler:3.1.9'
```java
Aria.download(this).load(DOWNLOAD_URL).pause();
```
* 恢复下载
* 取消下载
```java
Aria.download(this).load(DOWNLOAD_URL).cancel();
```
### 一组任务下载
任务组的下载和普通任务的下载基本上差不多,区别在于,任务组下载不需要对每一个子任务设置保存路径,**但是需要设置任务组保存文件夹路径,所有子任务都保存在该文件夹下**
* 下载\恢复下载
```java
Aria.download(this)
.load(urls) //设置一主任务,参数为List<String>
.setDownloadDirPath(groupDirPath) //设置任务组的文件夹路径
.start(); //启动下载
```
* 暂停
```java
Aria.download(this).load(DOWNLOAD_URL).resume();
Aria.download(this).load(urls).pause();
```
* 取消下载
```java
Aria.download(this).load(DOWNLOAD_URL).cancel();
Aria.download(this).load(urls).cancel();
```
### 下载状态获取
@ -94,12 +107,12 @@ annotationProcessor 'com.arialyy.aria:aria-compiler:3.1.9'
}
```
2. 使用`@Download`或`@Upload`注解你的函数
2. 使用`@Download`或`@Upload`或`@DownloadGroup`注解你的函数
**注意:**
- 注解回掉采用Apt的方式实现,所以,你不需要担心这会影响你机器的性能
- 被注解的方法**不能被private修饰**
- 被注解的方法**只能有一个参数,并且参数类型必须是`DownloadTask`或`UploadTask`**
- 被注解的方法**只能有一个参数,并且参数类型必须是`DownloadTask`或`UploadTask`或`DownloadGroupTask`**
- 方法名可以为任意字符串
3. 除了在widget(Activity、Fragment、Dialog、Popupwindow)中使用注解方法外,你还可以在Service、Notification等组件中使用注解函数。
@ -321,6 +334,7 @@ Aria.download(this).load(DOWNLOAD_URL).setDownloadPath(PATH).setHighestPriority(
## 开发日志
+ v_3.2.6 移除广播事件,增加任务组下载功能
+ v_3.1.9 修复stopAll队列没有任务时崩溃的问题,增加针对单个任务监听的功能
+ v_3.1.7 修复某些文件下载不了的bug,增加apt注解方法,事件获取更加简单了
+ v_3.1.6 取消任务时onTaskCancel回调两次的bug
@ -330,16 +344,6 @@ Aria.download(this).load(DOWNLOAD_URL).setDownloadPath(PATH).setHighestPriority(
+ v_3.0.3 修复暂停后删除任务,闪退问题,添加删除记录的api
+ v_3.0.2 支持30x重定向链接下载
+ v_3.0.0 添加上传任务支持,修复一些已发现的bug
+ v_2.4.4 修复不支持断点的下载链接拿不到文件大小的问题
+ v_2.4.3 修复404链接卡顿的问题
+ v_2.4.2 修复失败重试无效的bug
+ v_2.4.1 修复下载慢的问题,修复application、service 不能使用的问题
+ v_2.4.0 支持https链接下载
+ v_2.3.8 修复数据错乱的bug、添加fragment支持
+ v_2.3.6 添加dialog、popupWindow支持
+ v_2.3.3 添加断点支持、修改下载逻辑,让使用更加简单、修复一个内存泄露的bug
+ v_2.3.1 重命名为Aria,下载流程简化
+ v_2.1.1 增加,选择最大下载任务数接口
License
-------

@ -38,7 +38,7 @@ ext {
userOrg = 'arialyy'
groupId = 'com.arialyy.aria'
// publishVersion = '0.0.8'
publishVersion = '3.2.3_dev'
publishVersion = '3.2.6'
repoName='maven'
desc = 'android 下载框架'
website = 'https://github.com/AriaLyy/Aria'

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Loading…
Cancel
Save