|
|
@ -36,12 +36,13 @@ import java.util.concurrent.Executors; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Created by AriaL on 2017/7/1. |
|
|
|
* Created by AriaL on 2017/7/1. |
|
|
|
* 文件下载器 |
|
|
|
* 任务处理器 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>> |
|
|
|
public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>> |
|
|
|
implements Runnable, IUtil { |
|
|
|
implements Runnable, IUtil { |
|
|
|
public static final String STATE = "_state_"; |
|
|
|
public static final String STATE = "_state_"; |
|
|
|
public static final String RECORD = "_record_"; |
|
|
|
public static final String RECORD = "_record_"; |
|
|
|
|
|
|
|
protected static final long SUB_LEN = 1024 * 1024; |
|
|
|
|
|
|
|
|
|
|
|
private final String TAG = "AbsFileer"; |
|
|
|
private final String TAG = "AbsFileer"; |
|
|
|
protected IEventListener mListener; |
|
|
|
protected IEventListener mListener; |
|
|
@ -49,7 +50,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte |
|
|
|
protected ENTITY mEntity; |
|
|
|
protected ENTITY mEntity; |
|
|
|
protected File mConfigFile;//信息配置文件
|
|
|
|
protected File mConfigFile;//信息配置文件
|
|
|
|
protected Context mContext; |
|
|
|
protected Context mContext; |
|
|
|
protected File mTempFile; //下载的文件
|
|
|
|
protected File mTempFile; //文件
|
|
|
|
protected boolean isNewTask = true; |
|
|
|
protected boolean isNewTask = true; |
|
|
|
protected StateConstance mConstance; |
|
|
|
protected StateConstance mConstance; |
|
|
|
private ExecutorService mFixedThreadPool; |
|
|
|
private ExecutorService mFixedThreadPool; |
|
|
@ -64,7 +65,6 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte |
|
|
|
/** |
|
|
|
/** |
|
|
|
* 小于1m的文件不启用多线程 |
|
|
|
* 小于1m的文件不启用多线程 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
private static final long SUB_LEN = 1024 * 1024; |
|
|
|
|
|
|
|
private Timer mTimer; |
|
|
|
private Timer mTimer; |
|
|
|
private long mUpdateInterval = 1000; |
|
|
|
private long mUpdateInterval = 1000; |
|
|
|
|
|
|
|
|
|
|
@ -89,9 +89,6 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public StateConstance getConstance() { |
|
|
|
|
|
|
|
return mConstance; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override public void run() { |
|
|
|
@Override public void run() { |
|
|
|
if (mConstance.isRunning) { |
|
|
|
if (mConstance.isRunning) { |
|
|
@ -101,7 +98,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 开始下载流程 |
|
|
|
* 开始流程 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
private void startFlow() { |
|
|
|
private void startFlow() { |
|
|
|
mConstance.resetState(); |
|
|
|
mConstance.resetState(); |
|
|
@ -115,7 +112,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte |
|
|
|
mConstance.THREAD_NUM = mTotalThreadNum; |
|
|
|
mConstance.THREAD_NUM = mTotalThreadNum; |
|
|
|
handleNoSupportBP(); |
|
|
|
handleNoSupportBP(); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
mTotalThreadNum = isNewTask ? (getNewTaskThreadNum()) : mStartThreadNum; |
|
|
|
mTotalThreadNum = isNewTask ? (mStartThreadNum = setNewTaskThreadNum()) : mStartThreadNum; |
|
|
|
mConstance.THREAD_NUM = mTotalThreadNum; |
|
|
|
mConstance.THREAD_NUM = mTotalThreadNum; |
|
|
|
handleBreakpoint(); |
|
|
|
handleBreakpoint(); |
|
|
|
} |
|
|
|
} |
|
|
@ -125,13 +122,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte |
|
|
|
/** |
|
|
|
/** |
|
|
|
* 设置新任务的最大线程数 |
|
|
|
* 设置新任务的最大线程数 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
protected int getNewTaskThreadNum() { |
|
|
|
protected abstract int setNewTaskThreadNum(); |
|
|
|
final int num = |
|
|
|
|
|
|
|
mEntity.getFileSize() <= SUB_LEN || mTaskEntity.requestType == AbsTaskEntity.D_FTP_DIR ? 1 |
|
|
|
|
|
|
|
: AriaManager.getInstance(mContext).getDownloadConfig().getThreadNum(); |
|
|
|
|
|
|
|
mStartThreadNum = num; |
|
|
|
|
|
|
|
return num; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 启动进度获取定时器 |
|
|
|
* 启动进度获取定时器 |
|
|
@ -165,13 +156,12 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte |
|
|
|
* |
|
|
|
* |
|
|
|
* @param interval 单位毫秒,不能小于0 |
|
|
|
* @param interval 单位毫秒,不能小于0 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
protected long setUpdateInterval(long interval) { |
|
|
|
protected void setUpdateInterval(long interval) { |
|
|
|
if (interval < 0) { |
|
|
|
if (interval < 0) { |
|
|
|
ALog.w(TAG, "更新间隔不能小于0,默认为1000毫秒"); |
|
|
|
ALog.w(TAG, "更新间隔不能小于0,默认为1000毫秒"); |
|
|
|
return 1000; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
mUpdateInterval = interval; |
|
|
|
mUpdateInterval = interval; |
|
|
|
return interval; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override public long getFileSize() { |
|
|
|
@Override public long getFileSize() { |
|
|
@ -236,12 +226,6 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte |
|
|
|
start(); |
|
|
|
start(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* 返回该下载器的 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public IEventListener getListener() { |
|
|
|
|
|
|
|
return mListener; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 检查任务是否是新任务,新任务条件: |
|
|
|
* 检查任务是否是新任务,新任务条件: |
|
|
@ -296,7 +280,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte |
|
|
|
/** |
|
|
|
/** |
|
|
|
* 恢复记录地址 |
|
|
|
* 恢复记录地址 |
|
|
|
* |
|
|
|
* |
|
|
|
* @return true 表示下载完成 |
|
|
|
* @return {@code true}任务已完成 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
private boolean resumeRecordLocation(int i, long startL, long endL) { |
|
|
|
private boolean resumeRecordLocation(int i, long startL, long endL) { |
|
|
|
mConstance.CURRENT_LOCATION += endL - startL; |
|
|
|
mConstance.CURRENT_LOCATION += endL - startL; |
|
|
|