pull/330/head
AriaLyy 8 years ago
parent 37c138aa34
commit 9d284cc86f
  1. 18
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadUtil.java
  2. 18
      Aria/src/main/java/com/arialyy/aria/core/download/SingleThreadTask.java

@ -338,7 +338,7 @@ class DownloadUtil implements IDownloadUtil, Runnable {
* 处理不支持断点的下载 * 处理不支持断点的下载
*/ */
private void handleNoSupportBreakpointDownload(HttpURLConnection conn) { private void handleNoSupportBreakpointDownload(HttpURLConnection conn) {
ConfigEntity entity = new ConfigEntity(); ChildThreadConfigEntity entity = new ChildThreadConfigEntity();
long len = conn.getContentLength(); long len = conn.getContentLength();
entity.FILE_SIZE = len; entity.FILE_SIZE = len;
entity.DOWNLOAD_URL = mDownloadEntity.isRedirect() ? mDownloadEntity.getRedirectUrl() entity.DOWNLOAD_URL = mDownloadEntity.isRedirect() ? mDownloadEntity.getRedirectUrl()
@ -348,7 +348,7 @@ class DownloadUtil implements IDownloadUtil, Runnable {
entity.START_LOCATION = 0; entity.START_LOCATION = 0;
entity.END_LOCATION = entity.FILE_SIZE; entity.END_LOCATION = entity.FILE_SIZE;
entity.CONFIG_FILE_PATH = mConfigFile.getPath(); entity.CONFIG_FILE_PATH = mConfigFile.getPath();
entity.isSupportBreakpoint = isSupportBreakpoint; entity.IS_SUPPORT_BREAK_POINT = isSupportBreakpoint;
entity.DOWNLOAD_TASK_ENTITY = mDownloadTaskEntity; entity.DOWNLOAD_TASK_ENTITY = mDownloadTaskEntity;
THREAD_NUM = 1; THREAD_NUM = 1;
CONSTANCE.THREAD_NUM = THREAD_NUM; CONSTANCE.THREAD_NUM = THREAD_NUM;
@ -439,7 +439,7 @@ class DownloadUtil implements IDownloadUtil, Runnable {
* 创建单线程任务 * 创建单线程任务
*/ */
private void addSingleTask(int i, long startL, long endL, long fileLength) { private void addSingleTask(int i, long startL, long endL, long fileLength) {
ConfigEntity entity = new ConfigEntity(); ChildThreadConfigEntity entity = new ChildThreadConfigEntity();
entity.FILE_SIZE = fileLength; entity.FILE_SIZE = fileLength;
entity.DOWNLOAD_URL = mDownloadEntity.isRedirect() ? mDownloadEntity.getRedirectUrl() entity.DOWNLOAD_URL = mDownloadEntity.isRedirect() ? mDownloadEntity.getRedirectUrl()
: mDownloadEntity.getDownloadUrl(); : mDownloadEntity.getDownloadUrl();
@ -448,7 +448,7 @@ class DownloadUtil implements IDownloadUtil, Runnable {
entity.START_LOCATION = startL; entity.START_LOCATION = startL;
entity.END_LOCATION = endL; entity.END_LOCATION = endL;
entity.CONFIG_FILE_PATH = mConfigFile.getPath(); entity.CONFIG_FILE_PATH = mConfigFile.getPath();
entity.isSupportBreakpoint = isSupportBreakpoint; entity.IS_SUPPORT_BREAK_POINT = isSupportBreakpoint;
entity.DOWNLOAD_TASK_ENTITY = mDownloadTaskEntity; entity.DOWNLOAD_TASK_ENTITY = mDownloadTaskEntity;
CONSTANCE.THREAD_NUM = THREAD_NUM; CONSTANCE.THREAD_NUM = THREAD_NUM;
SingleThreadTask task = new SingleThreadTask(CONSTANCE, mListener, entity); SingleThreadTask task = new SingleThreadTask(CONSTANCE, mListener, entity);
@ -477,16 +477,20 @@ class DownloadUtil implements IDownloadUtil, Runnable {
/** /**
* 子线程下载信息类 * 子线程下载信息类
*/ */
final static class ConfigEntity { final static class ChildThreadConfigEntity {
//文件大小 //线程Id
int THREAD_ID; int THREAD_ID;
//下载文件大小
long FILE_SIZE; long FILE_SIZE;
//子线程启动下载位置
long START_LOCATION; long START_LOCATION;
//子线程结束下载位置
long END_LOCATION; long END_LOCATION;
//下载路径
File TEMP_FILE; File TEMP_FILE;
String DOWNLOAD_URL; String DOWNLOAD_URL;
String CONFIG_FILE_PATH; String CONFIG_FILE_PATH;
DownloadTaskEntity DOWNLOAD_TASK_ENTITY; DownloadTaskEntity DOWNLOAD_TASK_ENTITY;
boolean isSupportBreakpoint = true; boolean IS_SUPPORT_BREAK_POINT = true;
} }
} }

@ -28,9 +28,7 @@ import java.math.BigDecimal;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.HashSet;
import java.util.Properties; import java.util.Properties;
import java.util.Set;
/** /**
* Created by lyy on 2017/1/18. * Created by lyy on 2017/1/18.
@ -38,7 +36,7 @@ import java.util.Set;
*/ */
final class SingleThreadTask implements Runnable { final class SingleThreadTask implements Runnable {
private static final String TAG = "SingleThreadTask"; private static final String TAG = "SingleThreadTask";
private DownloadUtil.ConfigEntity mConfigEntity; private DownloadUtil.ChildThreadConfigEntity mConfigEntity;
private String mConfigFPath; private String mConfigFPath;
private long mChildCurrentLocation = 0; private long mChildCurrentLocation = 0;
private int mBufSize; private int mBufSize;
@ -47,14 +45,14 @@ final class SingleThreadTask implements Runnable {
private long mSleepTime = 0; private long mSleepTime = 0;
SingleThreadTask(DownloadStateConstance constance, IDownloadListener listener, SingleThreadTask(DownloadStateConstance constance, IDownloadListener listener,
DownloadUtil.ConfigEntity downloadInfo) { DownloadUtil.ChildThreadConfigEntity downloadInfo) {
AriaManager manager = AriaManager.getInstance(AriaManager.APP); AriaManager manager = AriaManager.getInstance(AriaManager.APP);
CONSTANCE = constance; CONSTANCE = constance;
CONSTANCE.CONNECT_TIME_OUT = manager.getDownloadConfig().getConnectTimeOut(); CONSTANCE.CONNECT_TIME_OUT = manager.getDownloadConfig().getConnectTimeOut();
CONSTANCE.READ_TIME_OUT = manager.getDownloadConfig().getIOTimeOut(); CONSTANCE.READ_TIME_OUT = manager.getDownloadConfig().getIOTimeOut();
mListener = listener; mListener = listener;
this.mConfigEntity = downloadInfo; this.mConfigEntity = downloadInfo;
if (mConfigEntity.isSupportBreakpoint) { if (mConfigEntity.IS_SUPPORT_BREAK_POINT) {
mConfigFPath = downloadInfo.CONFIG_FILE_PATH; mConfigFPath = downloadInfo.CONFIG_FILE_PATH;
} }
mBufSize = manager.getDownloadConfig().getBuffSize(); mBufSize = manager.getDownloadConfig().getBuffSize();
@ -82,7 +80,7 @@ final class SingleThreadTask implements Runnable {
try { try {
URL url = new URL(mConfigEntity.DOWNLOAD_URL); URL url = new URL(mConfigEntity.DOWNLOAD_URL);
conn = ConnectionHelp.handleConnection(url); conn = ConnectionHelp.handleConnection(url);
if (mConfigEntity.isSupportBreakpoint) { if (mConfigEntity.IS_SUPPORT_BREAK_POINT) {
Log.d(TAG, "任务【" Log.d(TAG, "任务【"
+ mConfigEntity.TEMP_FILE.getName() + mConfigEntity.TEMP_FILE.getName()
+ "】线程__" + "】线程__"
@ -129,7 +127,7 @@ final class SingleThreadTask implements Runnable {
return; return;
} }
//支持断点的处理 //支持断点的处理
if (mConfigEntity.isSupportBreakpoint) { if (mConfigEntity.IS_SUPPORT_BREAK_POINT) {
Log.i(TAG, "任务【" Log.i(TAG, "任务【"
+ mConfigEntity.TEMP_FILE.getName() + mConfigEntity.TEMP_FILE.getName()
+ "】线程__" + "】线程__"
@ -180,7 +178,7 @@ final class SingleThreadTask implements Runnable {
protected void stop() { protected void stop() {
synchronized (AriaManager.LOCK) { synchronized (AriaManager.LOCK) {
try { try {
if (mConfigEntity.isSupportBreakpoint) { if (mConfigEntity.IS_SUPPORT_BREAK_POINT) {
CONSTANCE.STOP_NUM++; CONSTANCE.STOP_NUM++;
Log.d(TAG, "任务【" Log.d(TAG, "任务【"
+ mConfigEntity.TEMP_FILE.getName() + mConfigEntity.TEMP_FILE.getName()
@ -221,7 +219,7 @@ final class SingleThreadTask implements Runnable {
*/ */
protected void cancel() { protected void cancel() {
synchronized (AriaManager.LOCK) { synchronized (AriaManager.LOCK) {
if (mConfigEntity.isSupportBreakpoint) { if (mConfigEntity.IS_SUPPORT_BREAK_POINT) {
CONSTANCE.CANCEL_NUM++; CONSTANCE.CANCEL_NUM++;
Log.d(TAG, "任务【" Log.d(TAG, "任务【"
+ mConfigEntity.TEMP_FILE.getName() + mConfigEntity.TEMP_FILE.getName()
@ -260,7 +258,7 @@ final class SingleThreadTask implements Runnable {
if (ex != null) { if (ex != null) {
Log.e(TAG, msg + "\n" + CommonUtil.getPrintException(ex)); Log.e(TAG, msg + "\n" + CommonUtil.getPrintException(ex));
} }
if (mConfigEntity.isSupportBreakpoint) { if (mConfigEntity.IS_SUPPORT_BREAK_POINT) {
writeConfig(false, currentLocation); writeConfig(false, currentLocation);
if (CONSTANCE.isFail()) { if (CONSTANCE.isFail()) {
Log.e(TAG, "任务【" + mConfigEntity.TEMP_FILE.getName() + "】下载失败"); Log.e(TAG, "任务【" + mConfigEntity.TEMP_FILE.getName() + "】下载失败");

Loading…
Cancel
Save