This commit is contained in:
@ -19,15 +19,9 @@ package com.arialyy.aria.core.command.normal;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import com.arialyy.aria.core.AriaManager;
|
import com.arialyy.aria.core.AriaManager;
|
||||||
import com.arialyy.aria.core.QueueMod;
|
import com.arialyy.aria.core.QueueMod;
|
||||||
import com.arialyy.aria.core.download.DownloadGroupTask;
|
|
||||||
import com.arialyy.aria.core.download.DownloadTask;
|
|
||||||
import com.arialyy.aria.core.inf.AbsTask;
|
import com.arialyy.aria.core.inf.AbsTask;
|
||||||
import com.arialyy.aria.core.inf.IEntity;
|
import com.arialyy.aria.core.inf.IEntity;
|
||||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||||
import com.arialyy.aria.core.queue.DownloadGroupTaskQueue;
|
|
||||||
import com.arialyy.aria.core.queue.DownloadTaskQueue;
|
|
||||||
import com.arialyy.aria.core.scheduler.DQueueMapping;
|
|
||||||
import com.arialyy.aria.orm.Primary;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by lyy on 2016/8/22.
|
* Created by lyy on 2016/8/22.
|
||||||
|
@ -25,7 +25,6 @@ import com.arialyy.aria.core.download.DownloadGroupTaskEntity;
|
|||||||
import com.arialyy.aria.core.queue.pool.BaseCachePool;
|
import com.arialyy.aria.core.queue.pool.BaseCachePool;
|
||||||
import com.arialyy.aria.core.queue.pool.BaseExecutePool;
|
import com.arialyy.aria.core.queue.pool.BaseExecutePool;
|
||||||
import com.arialyy.aria.core.queue.pool.DownloadSharePool;
|
import com.arialyy.aria.core.queue.pool.DownloadSharePool;
|
||||||
import com.arialyy.aria.core.scheduler.DQueueMapping;
|
|
||||||
import com.arialyy.aria.core.scheduler.DownloadGroupSchedulers;
|
import com.arialyy.aria.core.scheduler.DownloadGroupSchedulers;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -65,8 +64,6 @@ public class DownloadGroupTaskQueue
|
|||||||
.createTask(targetName, entity, DownloadGroupSchedulers.getInstance());
|
.createTask(targetName, entity, DownloadGroupSchedulers.getInstance());
|
||||||
entity.key = entity.getEntity().getGroupName();
|
entity.key = entity.getEntity().getGroupName();
|
||||||
mCachePool.putTask(task);
|
mCachePool.putTask(task);
|
||||||
|
|
||||||
DQueueMapping.getInstance().addType(task.getKey(), DQueueMapping.QUEUE_TYPE_DOWNLOAD_GROUP);
|
|
||||||
} else {
|
} else {
|
||||||
Log.e(TAG, "target name 为 null!!");
|
Log.e(TAG, "target name 为 null!!");
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,6 @@ import com.arialyy.aria.core.download.DownloadTaskEntity;
|
|||||||
import com.arialyy.aria.core.queue.pool.BaseCachePool;
|
import com.arialyy.aria.core.queue.pool.BaseCachePool;
|
||||||
import com.arialyy.aria.core.queue.pool.BaseExecutePool;
|
import com.arialyy.aria.core.queue.pool.BaseExecutePool;
|
||||||
import com.arialyy.aria.core.queue.pool.DownloadSharePool;
|
import com.arialyy.aria.core.queue.pool.DownloadSharePool;
|
||||||
import com.arialyy.aria.core.scheduler.DQueueMapping;
|
|
||||||
import com.arialyy.aria.core.scheduler.DownloadSchedulers;
|
import com.arialyy.aria.core.scheduler.DownloadSchedulers;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -130,8 +129,6 @@ public class DownloadTaskQueue
|
|||||||
.createTask(target, entity, DownloadSchedulers.getInstance());
|
.createTask(target, entity, DownloadSchedulers.getInstance());
|
||||||
entity.key = entity.getEntity().getDownloadPath();
|
entity.key = entity.getEntity().getDownloadPath();
|
||||||
mCachePool.putTask(task);
|
mCachePool.putTask(task);
|
||||||
|
|
||||||
DQueueMapping.getInstance().addType(task.getKey(), DQueueMapping.QUEUE_TYPE_DOWNLOAD);
|
|
||||||
} else {
|
} else {
|
||||||
Log.e(TAG, "target name 为 null!!");
|
Log.e(TAG, "target name 为 null!!");
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ import android.util.Log;
|
|||||||
import com.arialyy.aria.core.AriaManager;
|
import com.arialyy.aria.core.AriaManager;
|
||||||
import com.arialyy.aria.core.inf.AbsTask;
|
import com.arialyy.aria.core.inf.AbsTask;
|
||||||
import com.arialyy.aria.core.inf.ITask;
|
import com.arialyy.aria.core.inf.ITask;
|
||||||
import com.arialyy.aria.core.scheduler.DQueueMapping;
|
|
||||||
import com.arialyy.aria.util.CommonUtil;
|
import com.arialyy.aria.util.CommonUtil;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -186,8 +185,6 @@ public class BaseExecutePool<TASK extends AbsTask> implements IPool<TASK> {
|
|||||||
String convertKey = CommonUtil.keyToHashKey(key);
|
String convertKey = CommonUtil.keyToHashKey(key);
|
||||||
TASK task = mExecuteMap.get(convertKey);
|
TASK task = mExecuteMap.get(convertKey);
|
||||||
mExecuteMap.remove(convertKey);
|
mExecuteMap.remove(convertKey);
|
||||||
|
|
||||||
DQueueMapping.getInstance().removeType(key);
|
|
||||||
return mExecuteQueue.remove(task);
|
return mExecuteQueue.remove(task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,89 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package com.arialyy.aria.core.scheduler;
|
|
||||||
|
|
||||||
import com.arialyy.aria.core.AriaManager;
|
|
||||||
import com.arialyy.aria.core.queue.DownloadGroupTaskQueue;
|
|
||||||
import com.arialyy.aria.core.queue.DownloadTaskQueue;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by Aria.Lao on 2017/7/13.
|
|
||||||
* 下载任务和队列的映射表
|
|
||||||
*/
|
|
||||||
public class DQueueMapping {
|
|
||||||
|
|
||||||
public static final int QUEUE_TYPE_DOWNLOAD = 0xa1;
|
|
||||||
public static final int QUEUE_TYPE_DOWNLOAD_GROUP = 0xa2;
|
|
||||||
public static final int QUEUE_NONE = 0xab2;
|
|
||||||
private LinkedHashMap<String, Integer> types = new LinkedHashMap<>();
|
|
||||||
|
|
||||||
private static volatile DQueueMapping instance = null;
|
|
||||||
|
|
||||||
private DQueueMapping() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DQueueMapping getInstance() {
|
|
||||||
if (instance == null) {
|
|
||||||
synchronized (AriaManager.LOCK) {
|
|
||||||
instance = new DQueueMapping();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* map中增加类型
|
|
||||||
*
|
|
||||||
* @param key 任务的key
|
|
||||||
* @param type {@link #QUEUE_TYPE_DOWNLOAD}、{@link #QUEUE_TYPE_DOWNLOAD}
|
|
||||||
*/
|
|
||||||
public void addType(String key, int type) {
|
|
||||||
types.put(key, type);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param key 任务的key
|
|
||||||
*/
|
|
||||||
public void removeType(String key) {
|
|
||||||
types.remove(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取下一个任务类型
|
|
||||||
*
|
|
||||||
* @return {@link #QUEUE_TYPE_DOWNLOAD}、{@link #QUEUE_TYPE_DOWNLOAD}
|
|
||||||
*/
|
|
||||||
public int nextType() {
|
|
||||||
Iterator<Map.Entry<String, Integer>> iter = types.entrySet().iterator();
|
|
||||||
if (iter.hasNext()) {
|
|
||||||
Map.Entry<String, Integer> next = iter.next();
|
|
||||||
int type = next.getValue();
|
|
||||||
iter.remove();
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
return QUEUE_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean canStart() {
|
|
||||||
return DownloadTaskQueue.getInstance().getCurrentExePoolNum()
|
|
||||||
+ DownloadGroupTaskQueue.getInstance().getCurrentExePoolNum() >= AriaManager.getInstance(
|
|
||||||
AriaManager.APP).getDownloadConfig().getMaxTaskNum();
|
|
||||||
}
|
|
||||||
}
|
|
@ -50,25 +50,4 @@ public class DownloadGroupSchedulers extends
|
|||||||
@Override String getProxySuffix() {
|
@Override String getProxySuffix() {
|
||||||
return "$$DownloadGroupListenerProxy";
|
return "$$DownloadGroupListenerProxy";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override protected void startNextTask() {
|
|
||||||
if (getExeTaskNum() + DownloadSchedulers.getInstance().getExeTaskNum()
|
|
||||||
>= AriaManager.getInstance(AriaManager.APP).getDownloadConfig().getMaxTaskNum()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!DownloadSchedulers.getInstance().hasNextTask()) {
|
|
||||||
nextSelf();
|
|
||||||
} else {
|
|
||||||
Integer nextType = DQueueMapping.getInstance().nextType();
|
|
||||||
if (nextType == DQueueMapping.QUEUE_TYPE_DOWNLOAD) {
|
|
||||||
DownloadSchedulers.getInstance().nextSelf();
|
|
||||||
} else {
|
|
||||||
nextSelf();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void nextSelf() {
|
|
||||||
super.startNextTask();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,11 @@
|
|||||||
|
|
||||||
package com.arialyy.aria.core.scheduler;
|
package com.arialyy.aria.core.scheduler;
|
||||||
|
|
||||||
import com.arialyy.aria.core.Aria;
|
|
||||||
import com.arialyy.aria.core.AriaManager;
|
import com.arialyy.aria.core.AriaManager;
|
||||||
import com.arialyy.aria.core.download.DownloadTaskEntity;
|
import com.arialyy.aria.core.download.DownloadTaskEntity;
|
||||||
import com.arialyy.aria.core.queue.DownloadTaskQueue;
|
import com.arialyy.aria.core.queue.DownloadTaskQueue;
|
||||||
import com.arialyy.aria.core.download.DownloadEntity;
|
import com.arialyy.aria.core.download.DownloadEntity;
|
||||||
import com.arialyy.aria.core.download.DownloadTask;
|
import com.arialyy.aria.core.download.DownloadTask;
|
||||||
import java.nio.MappedByteBuffer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by lyy on 2016/8/16.
|
* Created by lyy on 2016/8/16.
|
||||||
@ -54,25 +52,4 @@ public class DownloadSchedulers
|
|||||||
@Override String getProxySuffix() {
|
@Override String getProxySuffix() {
|
||||||
return "$$DownloadListenerProxy";
|
return "$$DownloadListenerProxy";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override protected void startNextTask() {
|
|
||||||
if (getExeTaskNum() + DownloadGroupSchedulers.getInstance().getExeTaskNum()
|
|
||||||
>= AriaManager.getInstance(AriaManager.APP).getDownloadConfig().getMaxTaskNum()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!DownloadGroupSchedulers.getInstance().hasNextTask()) {
|
|
||||||
nextSelf();
|
|
||||||
} else {
|
|
||||||
Integer nextType = DQueueMapping.getInstance().nextType();
|
|
||||||
if (nextType == DQueueMapping.QUEUE_TYPE_DOWNLOAD_GROUP) {
|
|
||||||
DownloadGroupSchedulers.getInstance().nextSelf();
|
|
||||||
} else {
|
|
||||||
nextSelf();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void nextSelf() {
|
|
||||||
super.startNextTask();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -8,10 +8,10 @@
|
|||||||
<threadNum value="4"/>
|
<threadNum value="4"/>
|
||||||
|
|
||||||
<!--设置下载队列最大任务数, 默认为2-->
|
<!--设置下载队列最大任务数, 默认为2-->
|
||||||
<maxTaskNum value="2"/>
|
<maxTaskNum value="4"/>
|
||||||
|
|
||||||
<!--设置下载失败,重试次数,默认为10-->
|
<!--设置下载失败,重试次数,默认为10-->
|
||||||
<reTryNum value="2"/>
|
<reTryNum value="10"/>
|
||||||
|
|
||||||
<!--设置重试间隔,单位为毫秒,默认2000毫秒-->
|
<!--设置重试间隔,单位为毫秒,默认2000毫秒-->
|
||||||
<reTryInterval value="5000"/>
|
<reTryInterval value="5000"/>
|
||||||
@ -20,7 +20,7 @@
|
|||||||
<connectTimeOut value="1000"/>
|
<connectTimeOut value="1000"/>
|
||||||
|
|
||||||
<!--设置IO流读取时间,单位为毫秒,默认20000毫秒,该时间不能少于10000毫秒-->
|
<!--设置IO流读取时间,单位为毫秒,默认20000毫秒,该时间不能少于10000毫秒-->
|
||||||
<iOTimeOut value="200"/>
|
<iOTimeOut value="10000"/>
|
||||||
|
|
||||||
<!--设置写文件buff大小,该数值大小不能小于2048,数值变小,下载速度会变慢-->
|
<!--设置写文件buff大小,该数值大小不能小于2048,数值变小,下载速度会变慢-->
|
||||||
<buffSize value="8192"/>
|
<buffSize value="8192"/>
|
||||||
|
Reference in New Issue
Block a user