This commit is contained in:
@ -86,6 +86,26 @@ import org.xml.sax.SAXException;
|
||||
return mReceivers;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置上传任务的执行队列类型
|
||||
*
|
||||
* @param mod {@link com.arialyy.aria.core.QueueMod}
|
||||
*/
|
||||
public AriaManager setUploadQueueMod(QueueMod mod) {
|
||||
mUConfig.setQueueMod(mod.tag);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置下载任务的执行队列类型
|
||||
*
|
||||
* @param mod {@link com.arialyy.aria.core.QueueMod}
|
||||
*/
|
||||
public AriaManager setDownloadQueueMod(QueueMod mod) {
|
||||
mDConfig.setQueueMod(mod.tag);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 如果需要在代码中修改下载配置,请使用以下方法
|
||||
* <pre>
|
||||
|
@ -86,16 +86,33 @@ class ConfigHelper extends DefaultHandler {
|
||||
case "maxSpeed":
|
||||
loadMaxSpeed(value);
|
||||
break;
|
||||
case "queueMod":
|
||||
loadQueueMod(value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void loadQueueMod(String value) {
|
||||
String mod = "now";
|
||||
if (!TextUtils.isEmpty(value) && (value.equalsIgnoreCase("now") || value.equalsIgnoreCase(
|
||||
"wait"))) {
|
||||
mod = value;
|
||||
}
|
||||
if (isDownloadConfig) {
|
||||
mDownloadConfig.queueMod = mod;
|
||||
}
|
||||
if (isUploadConfig) {
|
||||
mUploadConfig.queueMod = mod;
|
||||
}
|
||||
}
|
||||
|
||||
private void loadMaxSpeed(String value) {
|
||||
double maxSpeed = 0.0;
|
||||
if (!TextUtils.isEmpty(value)) {
|
||||
maxSpeed = Double.parseDouble(value);
|
||||
}
|
||||
if (isDownloadConfig){
|
||||
if (isDownloadConfig) {
|
||||
mDownloadConfig.msxSpeed = maxSpeed;
|
||||
}
|
||||
}
|
||||
|
29
Aria/src/main/java/com/arialyy/aria/core/QueueMod.java
Normal file
29
Aria/src/main/java/com/arialyy/aria/core/QueueMod.java
Normal file
@ -0,0 +1,29 @@
|
||||
package com.arialyy.aria.core;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/6/21.
|
||||
* 执行队列类型
|
||||
*/
|
||||
public enum QueueMod {
|
||||
/**
|
||||
* 等待模式,如果执行队列已经满了,再次使用start命令执行任务时,该任务会被添加到缓存队列中
|
||||
* 当执行队列的任务完成时,将自动执行缓存队列中的任务
|
||||
*/
|
||||
WAIT("wait"),
|
||||
|
||||
/**
|
||||
* 立刻执行模式
|
||||
* 如果执行队列已经满了,再次使用start命令执行任务时,该任务会添加到执行队列队尾,而原来执行队列的队首任务会停止
|
||||
*/
|
||||
NOW("now");
|
||||
|
||||
String tag;
|
||||
|
||||
public String getTag() {
|
||||
return tag;
|
||||
}
|
||||
|
||||
QueueMod(String tag) {
|
||||
this.tag = tag;
|
||||
}
|
||||
}
|
@ -39,6 +39,11 @@ public abstract class AbsCmd<T extends AbsTaskEntity> implements ICmd {
|
||||
* 能否执行命令
|
||||
*/
|
||||
boolean canExeCmd = true;
|
||||
/**
|
||||
* 是否是下载任务的命令
|
||||
* {@code true} 下载任务的命令,{@code false} 上传任务的命令
|
||||
*/
|
||||
boolean isDownloadCmd = true;
|
||||
|
||||
/**
|
||||
* @param targetName 产生任务的对象名
|
||||
@ -51,8 +56,10 @@ public abstract class AbsCmd<T extends AbsTaskEntity> implements ICmd {
|
||||
TAG = CommonUtil.getClassName(this);
|
||||
if (entity instanceof DownloadTaskEntity) {
|
||||
mQueue = DownloadTaskQueue.getInstance();
|
||||
isDownloadCmd = true;
|
||||
} else if (entity instanceof UploadTaskEntity) {
|
||||
mQueue = UploadTaskQueue.getInstance();
|
||||
isDownloadCmd = false;
|
||||
}
|
||||
}
|
||||
}
|
@ -17,6 +17,9 @@
|
||||
package com.arialyy.aria.core.command;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.QueueMod;
|
||||
import com.arialyy.aria.core.inf.ITask;
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
|
||||
@ -40,7 +43,23 @@ class StartCmd<T extends AbsTaskEntity> extends AbsCmd<T> {
|
||||
if (!TextUtils.isEmpty(mTargetName)) {
|
||||
task.setTargetName(mTargetName);
|
||||
}
|
||||
mQueue.startTask(task);
|
||||
String mod;
|
||||
int maxTaskNum;
|
||||
AriaManager manager = AriaManager.getInstance(AriaManager.APP);
|
||||
if (isDownloadCmd) {
|
||||
mod = manager.getDownloadConfig().getQueueMod();
|
||||
maxTaskNum = manager.getDownloadConfig().getMaxTaskNum();
|
||||
} else {
|
||||
mod = manager.getUploadConfig().getQueueMod();
|
||||
maxTaskNum = manager.getUploadConfig().getMaxTaskNum();
|
||||
}
|
||||
if (mod.equals(QueueMod.NOW.getTag())) {
|
||||
mQueue.startTask(task);
|
||||
}else if (mod.equals(QueueMod.WAIT.getTag())){
|
||||
if (mQueue.getExeTaskNum() < maxTaskNum){
|
||||
mQueue.startTask(task);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -18,6 +18,7 @@ package com.arialyy.aria.core.download;
|
||||
import android.support.annotation.NonNull;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.inf.ICmd;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.inf.IReceiver;
|
||||
import com.arialyy.aria.core.command.CmdFactory;
|
||||
import com.arialyy.aria.core.command.AbsCmd;
|
||||
@ -26,6 +27,7 @@ import com.arialyy.aria.core.scheduler.ISchedulerListener;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import com.arialyy.aria.util.CheckUtil;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@ -67,6 +69,10 @@ public class DownloadReceiver implements IReceiver<DownloadEntity> {
|
||||
if (entity == null) {
|
||||
entity = new DownloadEntity();
|
||||
}
|
||||
File file = new File(entity.getDownloadPath());
|
||||
if (!file.exists()) {
|
||||
entity.setState(IEntity.STATE_WAIT);
|
||||
}
|
||||
entity.setDownloadUrl(downloadUrl);
|
||||
return new DownloadTarget(entity, targetName);
|
||||
}
|
||||
|
@ -36,6 +36,10 @@ abstract class AbsTaskQueue<TASK extends ITask, TASK_ENTITY extends AbsTaskEntit
|
||||
CachePool<TASK> mCachePool = new CachePool<>();
|
||||
ExecutePool<TASK> mExecutePool;
|
||||
|
||||
@Override public boolean taskIsRunning(String key) {
|
||||
return mExecutePool.getTask(key) != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止所有任务
|
||||
*/
|
||||
|
@ -32,6 +32,14 @@ import com.arialyy.aria.core.upload.UploadTaskEntity;
|
||||
*/
|
||||
public interface ITaskQueue<TASK extends ITask, TASK_ENTITY extends AbsTaskEntity, ENTITY extends IEntity> {
|
||||
|
||||
/**
|
||||
* 通过key判断任务是否正在执行
|
||||
*
|
||||
* @param key 下载链接,或上传文件的路径
|
||||
* @return {@code true} 任务正在运行
|
||||
*/
|
||||
boolean taskIsRunning(String key);
|
||||
|
||||
/**
|
||||
* 停止所有任务
|
||||
*/
|
||||
|
@ -187,6 +187,7 @@ final class SqlHelper extends SQLiteOpenHelper {
|
||||
print(FIND_DATA, sql);
|
||||
Cursor cursor = db.rawQuery(sql, null);
|
||||
List<T> data = cursor.getCount() > 0 ? newInstanceEntity(clazz, cursor) : null;
|
||||
cursor.close();
|
||||
close(db);
|
||||
return data;
|
||||
}
|
||||
@ -215,6 +216,7 @@ final class SqlHelper extends SQLiteOpenHelper {
|
||||
print(FIND_DATA, sb.toString());
|
||||
Cursor cursor = db.rawQuery(sb.toString(), null);
|
||||
List<T> data = cursor.getCount() > 0 ? newInstanceEntity(clazz, cursor) : null;
|
||||
cursor.close();
|
||||
close(db);
|
||||
return data;
|
||||
}
|
||||
@ -229,6 +231,7 @@ final class SqlHelper extends SQLiteOpenHelper {
|
||||
print(FIND_ALL_DATA, sb.toString());
|
||||
Cursor cursor = db.rawQuery(sb.toString(), null);
|
||||
List<T> data = cursor.getCount() > 0 ? newInstanceEntity(clazz, cursor) : null;
|
||||
cursor.close();
|
||||
close(db);
|
||||
return data;
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ dependencies {
|
||||
compile 'com.squareup.okhttp3:okhttp:3.2.0'
|
||||
compile 'com.arialyy.frame:MVVM2:2.2.0'
|
||||
compile project(':Aria')
|
||||
// compile 'com.arialyy.aria:aria-core:3.1.8'
|
||||
// annotationProcessor 'com.arialyy.aria:aria-compiler:3.1.8'
|
||||
// compile 'com.arialyy.aria:aria-core:3.1.9'
|
||||
// annotationProcessor 'com.arialyy.aria:aria-compiler:3.1.9'
|
||||
|
||||
}
|
||||
|
@ -34,6 +34,9 @@
|
||||
<!--是否需要转换速度单位,转换完成后为:1b/s、1kb/s、1mb/s、1gb/s、1tb/s,如果不需要将返回byte长度-->
|
||||
<convertSpeed value="true"/>
|
||||
|
||||
<!--执行队列类型,见com.arialyy.aria.core.QueueMod,默认类型为now-->
|
||||
<queueMod value="wait"/>
|
||||
|
||||
</download>
|
||||
|
||||
<upload>
|
||||
|
@ -153,7 +153,7 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.help:
|
||||
msg = "一些小知识点:\n"
|
||||
+ "1、你可以通过task.getKey().equals(DOWNLOAD_URL)判断是否是当前页面的下载,以防止progress乱跳\n"
|
||||
+ "1、你可以在注解中增加链接,用于指定被注解的方法只能被特定的下载任务回调,以防止progress乱跳\n"
|
||||
+ "2、当遇到网络慢的情况时,你可以先使用onPre()更新UI界面,待连接成功时,再在onTaskPre()获取完整的task数据,然后给UI界面设置正确的数据\n"
|
||||
+ "3、你可以在界面初始化时通过Aria.download(this).load(DOWNLOAD_URL).getPercent()等方法快速获取相关任务的一些数据";
|
||||
showMsgDialog("tip", msg);
|
||||
|
@ -3,6 +3,7 @@ package com.arialyy.simple.test;
|
||||
import android.os.Environment;
|
||||
import android.view.View;
|
||||
import com.arialyy.aria.core.Aria;
|
||||
import com.arialyy.aria.core.QueueMod;
|
||||
import com.arialyy.simple.R;
|
||||
import com.arialyy.simple.base.BaseActivity;
|
||||
import com.arialyy.simple.databinding.TestActivityMultiBinding;
|
||||
@ -54,20 +55,26 @@ public class TestMutilTaskSysDownload extends BaseActivity<TestActivityMultiBind
|
||||
"M02/3B/A5/oYYBAFaOeaSAdFyoAACaxVxgUJA092.jpg"
|
||||
};
|
||||
int maxNum = Aria.get(this).getDownloadConfig().getMaxTaskNum();
|
||||
Aria.get(this).setDownloadQueueMod(QueueMod.NOW);
|
||||
for (int i = 0; i < urlArray.length; i++) {
|
||||
if (i < maxNum) {
|
||||
Aria.download(this)
|
||||
.load(baseUrl + urlArray[i])
|
||||
.setDownloadPath(Environment.getExternalStorageDirectory() + "/test/" + i + ".jpg")
|
||||
//.addHeader("Accept-Encoding", "gzip,deflate,sdcn")
|
||||
.start();
|
||||
} else {
|
||||
Aria.download(this)
|
||||
.load(baseUrl + urlArray[i])
|
||||
.setDownloadPath(Environment.getExternalStorageDirectory() + "/test/" + i + ".jpg")
|
||||
//.addHeader("Accept-Encoding", "gzip,deflate,sdcn")
|
||||
.add();
|
||||
}
|
||||
Aria.download(this)
|
||||
.load(baseUrl + urlArray[i])
|
||||
.setDownloadPath(Environment.getExternalStorageDirectory() + "/test/" + i + ".jpg")
|
||||
//.addHeader("Accept-Encoding", "gzip,deflate,sdcn")
|
||||
.start();
|
||||
//if (i < maxNum) {
|
||||
// Aria.download(this)
|
||||
// .load(baseUrl + urlArray[i])
|
||||
// .setDownloadPath(Environment.getExternalStorageDirectory() + "/test/" + i + ".jpg")
|
||||
// //.addHeader("Accept-Encoding", "gzip,deflate,sdcn")
|
||||
// .start();
|
||||
//} else {
|
||||
// Aria.download(this)
|
||||
// .load(baseUrl + urlArray[i])
|
||||
// .setDownloadPath(Environment.getExternalStorageDirectory() + "/test/" + i + ".jpg")
|
||||
// //.addHeader("Accept-Encoding", "gzip,deflate,sdcn")
|
||||
// .add();
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -68,6 +68,23 @@ class Configuration {
|
||||
*/
|
||||
boolean isConvertSpeed = false;
|
||||
|
||||
/**
|
||||
* 执行队列类型
|
||||
*
|
||||
* @see QueueMod
|
||||
*/
|
||||
String queueMod = "now";
|
||||
|
||||
public String getQueueMod() {
|
||||
return queueMod;
|
||||
}
|
||||
|
||||
public BaseConfig setQueueMod(String queueMod) {
|
||||
this.queueMod = queueMod;
|
||||
saveKey("queueMod", queueMod);
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isOpenBreadCast() {
|
||||
return isOpenBreadCast;
|
||||
}
|
||||
@ -172,7 +189,7 @@ class Configuration {
|
||||
} else if (type == float.class || type == Float.class) {
|
||||
field.setFloat(this, Float.parseFloat(value));
|
||||
} else if (type == double.class || type == Double.class) {
|
||||
if (TextUtils.isEmpty(value)){
|
||||
if (TextUtils.isEmpty(value)) {
|
||||
value = "0.0";
|
||||
}
|
||||
field.setDouble(this, Double.parseDouble(value));
|
||||
|
Reference in New Issue
Block a user