修复任务切换出现的bug
This commit is contained in:
@ -25,6 +25,7 @@ import com.arialyy.aria.core.scheduler.DownloadSchedulers;
|
||||
import com.arialyy.aria.core.scheduler.IDownloadSchedulers;
|
||||
import com.arialyy.aria.core.task.Task;
|
||||
import com.arialyy.aria.core.task.TaskFactory;
|
||||
import com.arialyy.aria.util.Configuration;
|
||||
|
||||
/**
|
||||
* Created by lyy on 2016/8/17.
|
||||
@ -106,7 +107,7 @@ public class DownloadTaskQueue implements ITaskQueue {
|
||||
}
|
||||
|
||||
@Override public void reTryStart(Task task) {
|
||||
if (task == null){
|
||||
if (task == null) {
|
||||
Log.w(TAG, "重试下载失败,task 为null");
|
||||
return;
|
||||
}
|
||||
@ -126,7 +127,32 @@ public class DownloadTaskQueue implements ITaskQueue {
|
||||
}
|
||||
|
||||
@Override public void setDownloadNum(int downloadNum) {
|
||||
//原始长度
|
||||
int size = Configuration.getInstance().getDownloadNum();
|
||||
int diff = downloadNum - size;
|
||||
if (size == downloadNum){
|
||||
Log.d(TAG, "设置的下载任务数和配置文件的下载任务数一直,跳过");
|
||||
return;
|
||||
}
|
||||
//设置的任务数小于配置任务数
|
||||
if (diff <= -1 && mExecutePool.size() >= size) {
|
||||
for (int i = 0, len = Math.abs(diff); i < len; i++) {
|
||||
Task eTask = mExecutePool.pollTask();
|
||||
if (eTask != null) {
|
||||
stopTask(eTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
mExecutePool.setDownloadNum(downloadNum);
|
||||
if (diff >= 1) {
|
||||
for (int i = 0; i < diff; i++) {
|
||||
Task nextTask = getNextTask();
|
||||
if (nextTask != null
|
||||
&& nextTask.getDownloadEntity().getState() == DownloadEntity.STATE_WAIT) {
|
||||
startTask(nextTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override public Task createTask(Object target, DownloadEntity entity) {
|
||||
|
@ -14,7 +14,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package com.arialyy.aria.core.queue.pool;
|
||||
|
||||
import android.text.TextUtils;
|
||||
@ -25,6 +24,7 @@ import com.arialyy.aria.core.task.Task;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* Created by lyy on 2016/8/14.
|
||||
@ -35,6 +35,7 @@ public class CachePool implements IPool {
|
||||
private static final Object LOCK = new Object();
|
||||
private static final int MAX_NUM = Integer.MAX_VALUE; //最大下载任务数
|
||||
private static volatile CachePool INSTANCE = null;
|
||||
private static final long TIME_OUT = 1000;
|
||||
private Map<String, Task> mCacheArray;
|
||||
private LinkedBlockingQueue<Task> mCacheQueue;
|
||||
|
||||
@ -75,14 +76,20 @@ public class CachePool implements IPool {
|
||||
|
||||
@Override public Task pollTask() {
|
||||
synchronized (LOCK) {
|
||||
Task task = mCacheQueue.poll();
|
||||
try {
|
||||
Task task = null;
|
||||
task = mCacheQueue.poll(TIME_OUT, TimeUnit.MICROSECONDS);
|
||||
if (task != null) {
|
||||
String url = task.getDownloadEntity().getDownloadUrl();
|
||||
mCacheArray.remove(CommonUtil.keyToHashKey(url));
|
||||
}
|
||||
return task;
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public Task getTask(String downloadUrl) {
|
||||
synchronized (LOCK) {
|
||||
|
@ -137,12 +137,18 @@ public class ExecutePool implements IPool {
|
||||
|
||||
@Override public Task pollTask() {
|
||||
synchronized (LOCK) {
|
||||
Task task = mExecuteQueue.poll();
|
||||
try {
|
||||
Task task = null;
|
||||
task = mExecuteQueue.poll(TIME_OUT, TimeUnit.MICROSECONDS);
|
||||
if (task != null) {
|
||||
String url = task.getDownloadEntity().getDownloadUrl();
|
||||
mExecuteArray.remove(CommonUtil.keyToHashKey(url));
|
||||
}
|
||||
return task;
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user