diff --git a/PublicComponent/src/main/java/com/arialyy/aria/core/loader/NormalThreadStateManager.java b/PublicComponent/src/main/java/com/arialyy/aria/core/loader/NormalThreadStateManager.java index 4a8a6bbd..16911cb4 100644 --- a/PublicComponent/src/main/java/com/arialyy/aria/core/loader/NormalThreadStateManager.java +++ b/PublicComponent/src/main/java/com/arialyy/aria/core/loader/NormalThreadStateManager.java @@ -49,6 +49,8 @@ public class NormalThreadStateManager implements IThreadStateManager { private long mProgress; //当前总进度 private TaskRecord mTaskRecord; // 任务记录 private Looper mLooper; + private boolean mNeedRetry = false; + private AriaException mE = null; /** * @param listener 任务事件 @@ -90,10 +92,11 @@ public class NormalThreadStateManager implements IThreadStateManager { break; case STATE_FAIL: mFailNum.getAndIncrement(); + Bundle bundle = msg.getData(); + mNeedRetry = bundle.getBoolean(DATA_RETRY, false); + mE = (AriaException) bundle.getSerializable(DATA_ERROR_INFO); if (isFail()) { - Bundle b = msg.getData(); - mListener.onFail(b.getBoolean(DATA_RETRY, false), - (AriaException) b.getSerializable(DATA_ERROR_INFO)); + mListener.onFail(mNeedRetry, mE); quitLooper(); } break; @@ -116,6 +119,9 @@ public class NormalThreadStateManager implements IThreadStateManager { } mListener.onComplete(); quitLooper(); + } else if(isFail()) { + mListener.onFail(mNeedRetry, mE); + quitLooper(); } break; case STATE_RUNNING: @@ -170,7 +176,7 @@ public class NormalThreadStateManager implements IThreadStateManager { //ALog.d(TAG, // String.format("isStop; stopNum: %s, cancelNum: %s, failNum: %s, completeNum: %s", mStopNum, // mCancelNum, mFailNum, mCompleteNum)); - return mStopNum.get() == mThreadNum || mStopNum.get() + mCompleteNum.get() == mThreadNum; + return mStopNum.get() == mThreadNum || mStopNum.get() + mFailNum.get() + mCompleteNum.get() == mThreadNum; } /** diff --git a/PublicComponent/src/main/java/com/arialyy/aria/core/task/ThreadTask.java b/PublicComponent/src/main/java/com/arialyy/aria/core/task/ThreadTask.java index 8a67263b..1e6d36c0 100644 --- a/PublicComponent/src/main/java/com/arialyy/aria/core/task/ThreadTask.java +++ b/PublicComponent/src/main/java/com/arialyy/aria/core/task/ThreadTask.java @@ -232,7 +232,7 @@ public class ThreadTask implements IThreadTask, IThreadTaskObserver { FileUtil.deleteFile(blockFile); ALog.i(TAG, String.format("删除分块【%s】成功", blockFile.getName())); } - retryBlockTask(isBreak()); + retryBlockTask(!isBreak()); return false; } return true; @@ -464,6 +464,13 @@ public class ThreadTask implements IThreadTask, IThreadTaskObserver { ALog.w(TAG, String.format("分块【%s】第%s次重试", getFileName(), String.valueOf(mFailTimes))); mFailTimes++; handleBlockRecord(); + if (!NetUtils.isConnected(AriaConfig.getInstance().getAPP())) { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + // fall through + } + } ThreadTaskManager.getInstance().retryThread(this); return; }