多线程分块下载任务,任务异常没有回调

pull/974/head
wangdengqi 2 years ago
parent aa292e4389
commit d0f73578fc
  1. 14
      PublicComponent/src/main/java/com/arialyy/aria/core/loader/NormalThreadStateManager.java
  2. 9
      PublicComponent/src/main/java/com/arialyy/aria/core/task/ThreadTask.java

@ -49,6 +49,8 @@ public class NormalThreadStateManager implements IThreadStateManager {
private long mProgress; //当前总进度 private long mProgress; //当前总进度
private TaskRecord mTaskRecord; // 任务记录 private TaskRecord mTaskRecord; // 任务记录
private Looper mLooper; private Looper mLooper;
private boolean mNeedRetry = false;
private AriaException mE = null;
/** /**
* @param listener 任务事件 * @param listener 任务事件
@ -90,10 +92,11 @@ public class NormalThreadStateManager implements IThreadStateManager {
break; break;
case STATE_FAIL: case STATE_FAIL:
mFailNum.getAndIncrement(); mFailNum.getAndIncrement();
Bundle bundle = msg.getData();
mNeedRetry = bundle.getBoolean(DATA_RETRY, false);
mE = (AriaException) bundle.getSerializable(DATA_ERROR_INFO);
if (isFail()) { if (isFail()) {
Bundle b = msg.getData(); mListener.onFail(mNeedRetry, mE);
mListener.onFail(b.getBoolean(DATA_RETRY, false),
(AriaException) b.getSerializable(DATA_ERROR_INFO));
quitLooper(); quitLooper();
} }
break; break;
@ -116,6 +119,9 @@ public class NormalThreadStateManager implements IThreadStateManager {
} }
mListener.onComplete(); mListener.onComplete();
quitLooper(); quitLooper();
} else if(isFail()) {
mListener.onFail(mNeedRetry, mE);
quitLooper();
} }
break; break;
case STATE_RUNNING: case STATE_RUNNING:
@ -170,7 +176,7 @@ public class NormalThreadStateManager implements IThreadStateManager {
//ALog.d(TAG, //ALog.d(TAG,
// String.format("isStop; stopNum: %s, cancelNum: %s, failNum: %s, completeNum: %s", mStopNum, // String.format("isStop; stopNum: %s, cancelNum: %s, failNum: %s, completeNum: %s", mStopNum,
// mCancelNum, mFailNum, mCompleteNum)); // mCancelNum, mFailNum, mCompleteNum));
return mStopNum.get() == mThreadNum || mStopNum.get() + mCompleteNum.get() == mThreadNum; return mStopNum.get() == mThreadNum || mStopNum.get() + mFailNum.get() + mCompleteNum.get() == mThreadNum;
} }
/** /**

@ -232,7 +232,7 @@ public class ThreadTask implements IThreadTask, IThreadTaskObserver {
FileUtil.deleteFile(blockFile); FileUtil.deleteFile(blockFile);
ALog.i(TAG, String.format("删除分块【%s】成功", blockFile.getName())); ALog.i(TAG, String.format("删除分块【%s】成功", blockFile.getName()));
} }
retryBlockTask(isBreak()); retryBlockTask(!isBreak());
return false; return false;
} }
return true; return true;
@ -464,6 +464,13 @@ public class ThreadTask implements IThreadTask, IThreadTaskObserver {
ALog.w(TAG, String.format("分块【%s】第%s次重试", getFileName(), String.valueOf(mFailTimes))); ALog.w(TAG, String.format("分块【%s】第%s次重试", getFileName(), String.valueOf(mFailTimes)));
mFailTimes++; mFailTimes++;
handleBlockRecord(); handleBlockRecord();
if (!NetUtils.isConnected(AriaConfig.getInstance().getAPP())) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// fall through
}
}
ThreadTaskManager.getInstance().retryThread(this); ThreadTaskManager.getInstance().retryThread(this);
return; return;
} }

Loading…
Cancel
Save