From 131b9c27707c864e49a77c1df15ed5028833d5fc Mon Sep 17 00:00:00 2001 From: lyy <511455842@qq.com> Date: Wed, 2 Nov 2016 17:36:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../downloadutil/core/DownloadManager.java | 2 +- .../downloadutil/core/DownloadSchedulers.java | 196 +++++++++++++++ ...loadTarget.java => DownloadTaskQueue.java} | 69 +++++- .../downloadutil/core/IDownloadTarget.java | 226 ------------------ .../com/arialyy/downloadutil/core/Task.java | 23 +- .../downloadutil/core/TaskFactory.java | 8 +- .../downloadutil/core/command/CmdFactory.java | 17 +- .../core/command/IDownloadCmd.java | 17 +- .../downloadutil/core/command/StateCmd.java | 24 -- .../core/inf/IDownloadSchedulers.java | 25 ++ .../core/inf/{ITask.java => ITaskQueue.java} | 11 +- .../arialyy/downloadutil/help/Lockhelp.java | 10 + 12 files changed, 324 insertions(+), 304 deletions(-) create mode 100644 downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadSchedulers.java rename downloadutil/src/main/java/com/arialyy/downloadutil/core/{DownloadTarget.java => DownloadTaskQueue.java} (59%) delete mode 100644 downloadutil/src/main/java/com/arialyy/downloadutil/core/IDownloadTarget.java delete mode 100644 downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StateCmd.java create mode 100644 downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/IDownloadSchedulers.java rename downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/{ITask.java => ITaskQueue.java} (77%) create mode 100644 downloadutil/src/main/java/com/arialyy/downloadutil/help/Lockhelp.java diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java index 5b5c9187..55cfacef 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadManager.java @@ -88,7 +88,7 @@ public class DownloadManager { private DownloadManager(Context context) { mContext = context; - DownloadTarget.init(context); + DownloadTaskQueue.init(context); DbUtil.init(context); } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadSchedulers.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadSchedulers.java new file mode 100644 index 00000000..3956f758 --- /dev/null +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadSchedulers.java @@ -0,0 +1,196 @@ +package com.arialyy.downloadutil.core; + +import android.os.Message; +import android.util.Log; +import com.arialyy.downloadutil.core.inf.IDownloadSchedulers; +import com.arialyy.downloadutil.core.pool.ExecutePool; + +/** + * Created by lyy on 2016/8/16. + * 任务下载器,提供抽象的方法供具体的实现类操作 + */ +public class DownloadSchedulers implements IDownloadSchedulers { + private static final String TAG = "DownloadSchedulers"; + private static final Object LOCK = new Object(); + private static volatile DownloadSchedulers INSTANCE = null; + /** + * 任务开始 + */ + public static final int START = 1; + /** + * 任务停止 + */ + public static final int STOP = 2; + /** + * 任务失败 + */ + public static final int FAIL = 3; + /** + * 任务取消 + */ + public static final int CANCEL = 4; + /** + * 任务完成 + */ + public static final int COMPLETE = 5; + + /** + * 下载失败次数 + */ + int mFailNum = 10; + + /** + * 超时时间 + */ + long mTimeOut = 10000; + + /** + * 下载器任务监听 + */ + OnTargetListener mTargetListener; + DownloadTaskQueue mQueue; + + public static DownloadSchedulers getInstance(DownloadTaskQueue queue) { + if (INSTANCE == null) { + synchronized (LOCK) { + INSTANCE = new DownloadSchedulers(queue); + } + } + return INSTANCE; + } + + /** + * Target处理任务监听 + */ + public interface OnTargetListener { + /** + * 任务开始 + */ + public void onTaskStart(Task task); + + /** + * 任务停止 + */ + public void onTaskStop(Task task); + + /** + * 任务取消 + */ + public void onTaskCancel(Task task); + + /** + * 任务下载失败 + */ + public void onTaskFail(Task task); + + /** + * 任务完成 + */ + public void onTaskComplete(Task task); + } + + public DownloadSchedulers(DownloadTaskQueue downloadTaskQueue) { + mQueue = downloadTaskQueue; + } + + @Override public boolean handleMessage(Message msg) { + DownloadEntity entity = (DownloadEntity) msg.obj; + if (entity == null) { + Log.e(TAG, "请传入下载实体DownloadEntity"); + return true; + } + switch (msg.what) { + case STOP: + case CANCEL: + if (mQueue.getExecutePool().size() != ExecutePool.SIZE) { + startNextTask(entity); + } + break; + case COMPLETE: + startNextTask(entity); + break; + case FAIL: + handleFailTask(entity); + break; + } + callback(msg.what, entity); + return true; + } + + /** + * 回调 + * + * @param state 状态 + * @param entity 下载实体 + */ + private void callback(int state, DownloadEntity entity) { + if (mTargetListener != null) { + Task task = mQueue.getTask(entity); + switch (state) { + case START: + mTargetListener.onTaskStart(task); + break; + case STOP: + mTargetListener.onTaskStop(task); + break; + case CANCEL: + mTargetListener.onTaskCancel(task); + break; + case COMPLETE: + mTargetListener.onTaskComplete(task); + break; + case FAIL: + mTargetListener.onTaskFail(task); + break; + } + } + } + + /** + * 处理下载任务下载失败的情形 + * + * @param entity 失败实体 + */ + @Override public void handleFailTask(DownloadEntity entity) { + if (entity.getFailNum() <= mFailNum) { + Task task = mQueue.getTask(entity); + mQueue.reTryStart(task); + } else { + startNextTask(entity); + } + } + + /** + * 启动下一个任务,条件:任务停止,取消下载,任务完成 + * + * @param entity 通过Handler传递的下载实体 + */ + @Override public void startNextTask(DownloadEntity entity) { + mQueue.removeTask(entity); + Task newTask = mQueue.getNextTask(); + if (newTask == null) { + Log.w(TAG, "没有下一任务"); + return; + } + if (newTask.getDownloadEntity().getState() == DownloadEntity.STATE_WAIT) { + mQueue.startTask(newTask); + } + } + + /** + * 设置下载器监听 + * + * @param targetListener {@link OnTargetListener} + */ + public void setOnTargetListener(OnTargetListener targetListener) { + this.mTargetListener = targetListener; + } + + public void setFailNum(int mFailNum) { + this.mFailNum = mFailNum; + } + + public void setTimeOut(long timeOut) { + this.mTimeOut = timeOut; + } +} diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTaskQueue.java similarity index 59% rename from downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java rename to downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTaskQueue.java index 1649fe6d..998d3d79 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTarget.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/DownloadTaskQueue.java @@ -2,42 +2,80 @@ package com.arialyy.downloadutil.core; import android.content.Context; import android.util.Log; +import com.arialyy.downloadutil.core.inf.IDownloadSchedulers; +import com.arialyy.downloadutil.core.inf.IDownloader; +import com.arialyy.downloadutil.core.inf.ITaskQueue; +import com.arialyy.downloadutil.core.pool.CachePool; +import com.arialyy.downloadutil.core.pool.ExecutePool; /** * Created by lyy on 2016/8/17. - * 下载任务调度类 + * 下载任务队列 */ -public class DownloadTarget extends IDownloadTarget { - private static final String TAG = "DownloadTarget"; - private static final Object LOCK = new Object(); - private static volatile DownloadTarget INSTANCE = null; +public class DownloadTaskQueue implements ITaskQueue, IDownloader { + private static final String TAG = "DownloadTaskQueue"; + private static final Object LOCK = new Object(); + private static volatile DownloadTaskQueue INSTANCE = null; + private CachePool mCachePool = CachePool.getInstance(); + private ExecutePool mExecutePool = ExecutePool.getInstance(); private Context mContext; - public static DownloadTarget getInstance() { + public static DownloadTaskQueue getInstance() { if (INSTANCE == null) { throw new NullPointerException("请在Application中调用init进行注册"); } return INSTANCE; } - static DownloadTarget init(Context context) { + static DownloadTaskQueue init(Context context) { if (INSTANCE == null) { synchronized (LOCK) { - INSTANCE = new DownloadTarget(context.getApplicationContext()); + INSTANCE = new DownloadTaskQueue(context.getApplicationContext()); } } return INSTANCE; } - private DownloadTarget() { - super(); + private DownloadTaskQueue() { } - private DownloadTarget(Context context) { + private DownloadTaskQueue(Context context) { super(); mContext = context; } + /** + * 获取任务执行池 + */ + public ExecutePool getExecutePool() { + return mExecutePool; + } + + /** + * 获取缓存池 + */ + public CachePool getCachePool() { + return mCachePool; + } + + /** + * 获取当前运行的任务数 + * + * @return 当前正在执行的任务数 + */ + public int getCurrentTaskNum() { + return mExecutePool.size(); + } + + /** + * 获取缓存任务数 + * + * @return 获取缓存的任务数 + */ + public int getCacheTaskNum() { + return mCachePool.size(); + } + @Override public void startTask(Task task) { if (mExecutePool.putTask(task)) { mCachePool.removeTask(task); @@ -71,7 +109,14 @@ public class DownloadTarget extends IDownloadTarget { } @Override public Task createTask(DownloadEntity entity) { - Task task = TaskFactory.getInstance().createTask(mContext, entity, mTaskHandler); + return createTask(entity, null); + } + + @Override public Task createTask(DownloadEntity entity, IDownloadSchedulers schedulers) { + if (schedulers == null) { + schedulers = DownloadSchedulers.getInstance(this); + } + Task task = TaskFactory.getInstance().createTask(mContext, entity, schedulers); mCachePool.putTask(task); return task; } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/IDownloadTarget.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/IDownloadTarget.java deleted file mode 100644 index 11ec4534..00000000 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/IDownloadTarget.java +++ /dev/null @@ -1,226 +0,0 @@ -package com.arialyy.downloadutil.core; - -import android.os.Handler; -import android.os.Message; -import android.util.Log; -import com.arialyy.downloadutil.core.inf.IDownloader; -import com.arialyy.downloadutil.core.inf.ITask; -import com.arialyy.downloadutil.core.pool.CachePool; -import com.arialyy.downloadutil.core.pool.ExecutePool; - -/** - * Created by lyy on 2016/8/16. - * 任务下载器,提供抽象的方法供具体的实现类操作 - */ -public abstract class IDownloadTarget implements IDownloader, ITask { - /** - * 任务开始 - */ - public static final int START = 1; - /** - * 任务停止 - */ - public static final int STOP = 2; - /** - * 任务失败 - */ - public static final int FAIL = 3; - /** - * 任务取消 - */ - public static final int CANCEL = 4; - /** - * 任务完成 - */ - public static final int COMPLETE = 5; - - protected CachePool mCachePool = CachePool.getInstance(); - protected ExecutePool mExecutePool = ExecutePool.getInstance(); - protected AutoTaskHandler mTaskHandler; - /** - * 下载失败次数 - */ - protected int mFailNum = 10; - - /** - * 超时时间 - */ - protected long mTimeOut = 10000; - - /** - * 下载器任务监听 - */ - protected OnTargetListener mTargetListener; - - /** - * Target处理任务监听 - */ - public interface OnTargetListener { - /** - * 任务开始 - */ - public void onTaskStart(Task task); - - /** - * 任务停止 - */ - public void onTaskStop(Task task); - - /** - * 任务取消 - */ - public void onTaskCancel(Task task); - - /** - * 任务下载失败 - */ - public void onTaskFail(Task task); - - /** - * 任务完成 - */ - public void onTaskComplete(Task task); - } - - protected IDownloadTarget() { - mTaskHandler = new AutoTaskHandler(this); - } - - /** - * 设置下载器监听 - * - * @param targetListener {@link OnTargetListener} - */ - public void setOnTargetListener(OnTargetListener targetListener) { - this.mTargetListener = targetListener; - } - - /** - * 获取任务执行池 - */ - public ExecutePool getExecutePool() { - return mExecutePool; - } - - /** - * 获取当前运行的任务数 - * - * @return 当前正在执行的任务数 - */ - public int getCurrentTaskNum() { - return mExecutePool.size(); - } - - /** - * 获取缓存任务数 - * - * @return 获取缓存的任务数 - */ - public int getCacheTaskNum() { - return mCachePool.size(); - } - - public void setFailNum(int mFailNum) { - this.mFailNum = mFailNum; - } - - public void setTimeOut(long timeOut) { - this.mTimeOut = timeOut; - } - - /** - * 自动处理任务停止,下载失败,取消下载,自动下载下一个任务的操作 - */ - private static class AutoTaskHandler extends Handler { - private static final String TAG = "AutoTaskHandler"; - IDownloadTarget target; - - public AutoTaskHandler(IDownloadTarget target) { - this.target = target; - } - - @Override public void handleMessage(Message msg) { - super.handleMessage(msg); - DownloadEntity entity = (DownloadEntity) msg.obj; - if (entity == null) { - Log.e(TAG, "请传入下载实体DownloadEntity"); - return; - } - switch (msg.what) { - case STOP: - case CANCEL: - if (target.mExecutePool.size() != ExecutePool.SIZE) { - startNextTask(entity); - } - break; - case COMPLETE: - startNextTask(entity); - break; - case FAIL: - handleFailTask(entity); - break; - } - callback(msg.what, entity); - } - - /** - * 回调 - * - * @param state 状态 - * @param entity 下载实体 - */ - private void callback(int state, DownloadEntity entity) { - if (target.mTargetListener != null) { - Task task = target.getTask(entity); - switch (state) { - case START: - target.mTargetListener.onTaskStart(task); - break; - case STOP: - target.mTargetListener.onTaskStop(task); - break; - case CANCEL: - target.mTargetListener.onTaskCancel(task); - break; - case COMPLETE: - target.mTargetListener.onTaskComplete(task); - break; - case FAIL: - target.mTargetListener.onTaskFail(task); - break; - } - } - } - - /** - * 处理下载任务下载失败的情形 - * - * @param entity 失败实体 - */ - private void handleFailTask(DownloadEntity entity) { - if (entity.getFailNum() <= target.mFailNum) { - Task task = target.getTask(entity); - target.reTryStart(task); - } else { - startNextTask(entity); - } - } - - /** - * 启动下一个任务,条件:任务停止,取消下载,任务完成 - * - * @param entity 通过Handler传递的下载实体 - */ - private void startNextTask(DownloadEntity entity) { - target.removeTask(entity); - Task newTask = target.getNextTask(); - if (newTask == null) { - Log.w(TAG, "没有下一任务"); - return; - } - if (newTask.getDownloadEntity().getState() == DownloadEntity.STATE_WAIT) { - target.startTask(newTask); - } - } - } -} diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/Task.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/Task.java index f5bafbb5..53eec7aa 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/Task.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/Task.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Handler; import android.util.Log; +import com.arialyy.downloadutil.core.inf.IDownloadSchedulers; import com.arialyy.downloadutil.core.inf.IDownloadUtil; /** @@ -58,7 +59,7 @@ public class Task { } else { mEntity.setState(DownloadEntity.STATE_STOP); mEntity.save(); - sendInState2Target(IDownloadTarget.STOP); + sendInState2Target(DownloadSchedulers.STOP); // 发送停止下载的广播 Intent intent = createIntent(DownloadManager.ACTION_STOP); @@ -94,7 +95,7 @@ public class Task { mUtil.delConfigFile(); mUtil.delTempFile(); mEntity.deleteData(); - sendInState2Target(IDownloadTarget.CANCEL); + sendInState2Target(DownloadSchedulers.CANCEL); //发送取消下载的广播 Intent intent = createIntent(DownloadManager.ACTION_CANCEL); @@ -118,7 +119,7 @@ public class Task { /** * 将任务状态发送给下载器 * - * @param state {@link IDownloadTarget#START} + * @param state {@link DownloadSchedulers#START} */ private void sendInState2Target(int state) { if (mOutHandler != null) { @@ -170,7 +171,7 @@ public class Task { @Override public void onStart(long startLocation) { super.onStart(startLocation); downloadEntity.setState(DownloadEntity.STATE_DOWNLOAD_ING); - sendInState2Target(IDownloadTarget.START); + sendInState2Target(DownloadSchedulers.START); sendIntent(DownloadManager.ACTION_START, startLocation); } @@ -197,14 +198,14 @@ public class Task { super.onStop(stopLocation); downloadEntity.setState(DownloadEntity.STATE_STOP); downloadEntity.setSpeed(0); - sendInState2Target(IDownloadTarget.STOP); + sendInState2Target(DownloadSchedulers.STOP); sendIntent(DownloadManager.ACTION_STOP, stopLocation); } @Override public void onCancel() { super.onCancel(); downloadEntity.setState(DownloadEntity.STATE_CANCEL); - sendInState2Target(IDownloadTarget.CANCEL); + sendInState2Target(DownloadSchedulers.CANCEL); sendIntent(DownloadManager.ACTION_CANCEL, -1); downloadEntity.deleteData(); } @@ -214,7 +215,7 @@ public class Task { downloadEntity.setState(DownloadEntity.STATE_COMPLETE); downloadEntity.setDownloadComplete(true); downloadEntity.setSpeed(0); - sendInState2Target(IDownloadTarget.COMPLETE); + sendInState2Target(DownloadSchedulers.COMPLETE); sendIntent(DownloadManager.ACTION_COMPLETE, downloadEntity.getFileSize()); } @@ -222,7 +223,7 @@ public class Task { super.onFail(); downloadEntity.setState(DownloadEntity.STATE_FAIL); downloadEntity.setSpeed(0); - sendInState2Target(IDownloadTarget.FAIL); + sendInState2Target(DownloadSchedulers.FAIL); sendIntent(DownloadManager.ACTION_FAIL, -1); } @@ -254,10 +255,10 @@ public class Task { /** * 设置自定义Handler处理下载状态时间 * - * @param outHandler {@link IDownloadTarget.AutoTaskHandler} + * @param schedulers {@link IDownloadSchedulers} */ - public Builder setOutHandler(Handler outHandler) { - this.outHandler = outHandler; + public Builder setOutHandler(IDownloadSchedulers schedulers) { + this.outHandler = new Handler(schedulers); return this; } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/TaskFactory.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/TaskFactory.java index b80f6eda..4019c114 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/TaskFactory.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/TaskFactory.java @@ -1,7 +1,7 @@ package com.arialyy.downloadutil.core; import android.content.Context; -import android.os.Handler; +import com.arialyy.downloadutil.core.inf.IDownloadSchedulers; /** * Created by lyy on 2016/8/18. @@ -30,11 +30,11 @@ public class TaskFactory { * 创建普通下载任务 * * @param entity 下载实体 - * @param handler "com.arialyy.downloadutil.core.IDownloadTarget.AutoTaskHandler" + * @param schedulers {@link IDownloadSchedulers} */ - public Task createTask(Context context, DownloadEntity entity, Handler handler) { + public Task createTask(Context context, DownloadEntity entity, IDownloadSchedulers schedulers) { Task.Builder builder = new Task.Builder(context, entity); - builder.setOutHandler(handler); + builder.setOutHandler(schedulers); return builder.build(); } } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CmdFactory.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CmdFactory.java index 0dc5736e..b1bdbe66 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CmdFactory.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/CmdFactory.java @@ -28,10 +28,6 @@ public class CmdFactory { * 停止任务 */ public static final int TASK_STOP = 0x125; - /** - * 获取任务状态 - */ - public static final int TASK_STATE = 0x126; private static final Object LOCK = new Object(); private static volatile CmdFactory INSTANCE = null; @@ -53,7 +49,7 @@ public class CmdFactory { * @param context context * @param entity 下载实体 * @param type 命令类型{@link #TASK_CREATE}、{@link #TASK_START}、{@link #TASK_CANCEL}、{@link - * #TASK_STOP}、{@link #TASK_STATE} + * #TASK_STOP} */ public IDownloadCmd createCmd(Context context, DownloadEntity entity, int type) { switch (type) { @@ -66,22 +62,11 @@ public class CmdFactory { return createCancelCmd(context, entity); case TASK_STOP: return createStopCmd(context, entity); - case TASK_STATE: - return createStateCmd(context, entity); default: return null; } } - /** - * 创建获取任务状态的命令 - * - * @return {@link StateCmd} - */ - private StateCmd createStateCmd(Context context, DownloadEntity entity) { - return new StateCmd(context, entity); - } - /** * 创建停止命令 * diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/IDownloadCmd.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/IDownloadCmd.java index a5bf2e12..fb5e59ae 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/IDownloadCmd.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/IDownloadCmd.java @@ -1,9 +1,8 @@ package com.arialyy.downloadutil.core.command; import android.content.Context; -import com.arialyy.downloadutil.core.DownloadTarget; -import com.arialyy.downloadutil.core.IDownloadTarget; import com.arialyy.downloadutil.core.DownloadEntity; +import com.arialyy.downloadutil.core.DownloadTaskQueue; import com.arialyy.downloadutil.help.CheckHelp; import com.arialyy.downloadutil.util.Util; @@ -12,10 +11,10 @@ import com.arialyy.downloadutil.util.Util; * 下载命令 */ public abstract class IDownloadCmd { - protected IDownloadTarget target; - protected Context mContext; - protected DownloadEntity mEntity; - protected String TAG; + DownloadTaskQueue target; + Context mContext; + DownloadEntity mEntity; + String TAG; /** * @param context context @@ -25,7 +24,7 @@ public abstract class IDownloadCmd { if (!CheckHelp.checkDownloadEntity(entity)) { return; } - target = DownloadTarget.getInstance(); + target = DownloadTaskQueue.getInstance(); mContext = context; mEntity = entity; TAG = Util.getClassName(this); @@ -43,9 +42,9 @@ public abstract class IDownloadCmd { /** * 设置下载器 * - * @param downloadTarget {@link IDownloadTarget} + * @param downloadTarget {@link DownloadTaskQueue} */ - public void setDownloadTarget(IDownloadTarget downloadTarget) { + public void setDownloadQueue(DownloadTaskQueue downloadTarget) { target = downloadTarget; } } diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StateCmd.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StateCmd.java deleted file mode 100644 index 0cd7c783..00000000 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/command/StateCmd.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.arialyy.downloadutil.core.command; - -import android.content.Context; -import com.arialyy.downloadutil.core.DownloadEntity; - -/** - * Created by lyy on 2016/9/20. - * 获取下载状态的命令 - */ -class StateCmd extends IDownloadCmd { - - /** - * @param context context - * @param entity 下载实体 - */ - StateCmd(Context context, DownloadEntity entity) { - super(context, entity); - } - - @Override public void executeComment() { - - target.getTaskState(mEntity); - } -} diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/IDownloadSchedulers.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/IDownloadSchedulers.java new file mode 100644 index 00000000..630acf49 --- /dev/null +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/IDownloadSchedulers.java @@ -0,0 +1,25 @@ +package com.arialyy.downloadutil.core.inf; + +import android.os.Handler; +import com.arialyy.downloadutil.core.DownloadEntity; + +/** + * Created by “AriaLyy@outlook.com” on 2016/11/2. + * 下载调度器接口 + */ +public interface IDownloadSchedulers extends Handler.Callback { + + /** + * 处理下载任务下载失败的情形 + * + * @param entity 下载实体 + */ + public void handleFailTask(DownloadEntity entity); + + /** + * 启动下一个任务,条件:任务停止,取消下载,任务完成 + * + * @param entity 通过Handler传递的下载实体 + */ + public void startNextTask(DownloadEntity entity); +} diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/ITask.java b/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/ITaskQueue.java similarity index 77% rename from downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/ITask.java rename to downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/ITaskQueue.java index db68e044..549d05c7 100644 --- a/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/ITask.java +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/core/inf/ITaskQueue.java @@ -7,7 +7,7 @@ import com.arialyy.downloadutil.core.Task; * Created by lyy on 2016/8/16. * 任务功能接口 */ -public interface ITask { +public interface ITaskQueue { /** * 创建一个新的下载任务,创建时只是将新任务存储到缓存池 @@ -17,6 +17,15 @@ public interface ITask { */ public Task createTask(DownloadEntity entity); + /** + * 创建一个新的下载任务,创建时只是将新任务存储到缓存池 + * + * @param entity 下载实体{@link DownloadEntity} + * @param schedulers 下载调度器{@link IDownloadSchedulers} + * @return {@link Task} + */ + public Task createTask(DownloadEntity entity, IDownloadSchedulers schedulers); + /** * 通过下载链接从缓存池或任务池搜索下载任务,如果缓存池或任务池都没有任务,则创建新任务 * diff --git a/downloadutil/src/main/java/com/arialyy/downloadutil/help/Lockhelp.java b/downloadutil/src/main/java/com/arialyy/downloadutil/help/Lockhelp.java new file mode 100644 index 00000000..d04b0fdc --- /dev/null +++ b/downloadutil/src/main/java/com/arialyy/downloadutil/help/Lockhelp.java @@ -0,0 +1,10 @@ +package com.arialyy.downloadutil.help; + +/** + * Created by “AriaLyy@outlook.com” on 2016/11/2. + */ +public class LockHelp { + public static final Object LOCK = new Object(); + + +}