任务组代码优化
This commit is contained in:
@ -29,7 +29,7 @@ import com.arialyy.aria.util.CommonUtil;
|
|||||||
* Created by AriaL on 2017/6/29.
|
* Created by AriaL on 2017/6/29.
|
||||||
* 任务组命令
|
* 任务组命令
|
||||||
*/
|
*/
|
||||||
public abstract class AbsGroupCmd<T extends AbsTaskEntity> extends AbsCmd<T> {
|
abstract class AbsGroupCmd<T extends AbsTaskEntity> extends AbsCmd<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param targetName 创建任务的对象名
|
* @param targetName 创建任务的对象名
|
||||||
|
@ -22,7 +22,7 @@ import com.arialyy.aria.core.inf.AbsTaskEntity;
|
|||||||
/**
|
/**
|
||||||
* Created by AriaL on 2017/6/29.
|
* Created by AriaL on 2017/6/29.
|
||||||
*/
|
*/
|
||||||
public class GroupCmdFactory extends AbsCmdFactory<AbsGroupCmd> {
|
class GroupCmdFactory extends AbsCmdFactory<AbsGroupCmd> {
|
||||||
/**
|
/**
|
||||||
* 启动任务
|
* 启动任务
|
||||||
*/
|
*/
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
package com.arialyy.aria.core.command.normal;
|
package com.arialyy.aria.core.command.normal;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import com.arialyy.aria.core.inf.AbsNormalTask;
|
|
||||||
import com.arialyy.aria.core.inf.AbsTask;
|
import com.arialyy.aria.core.inf.AbsTask;
|
||||||
import com.arialyy.aria.core.inf.IEntity;
|
import com.arialyy.aria.core.inf.IEntity;
|
||||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||||
|
@ -25,13 +25,10 @@ import com.arialyy.aria.core.scheduler.DownloadSchedulers;
|
|||||||
import com.arialyy.aria.core.scheduler.ISchedulerListener;
|
import com.arialyy.aria.core.scheduler.ISchedulerListener;
|
||||||
import com.arialyy.aria.core.upload.ProxyHelper;
|
import com.arialyy.aria.core.upload.ProxyHelper;
|
||||||
import com.arialyy.aria.orm.DbEntity;
|
import com.arialyy.aria.orm.DbEntity;
|
||||||
import com.arialyy.aria.orm.DbUtil;
|
|
||||||
import com.arialyy.aria.util.CheckUtil;
|
import com.arialyy.aria.util.CheckUtil;
|
||||||
import com.arialyy.aria.util.CommonUtil;
|
import com.arialyy.aria.util.CommonUtil;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by lyy on 2016/12/5.
|
* Created by lyy on 2016/12/5.
|
||||||
@ -138,7 +135,8 @@ public class DownloadReceiver extends AbsReceiver {
|
|||||||
*/
|
*/
|
||||||
public DownloadEntity getDownloadEntity(String downloadUrl) {
|
public DownloadEntity getDownloadEntity(String downloadUrl) {
|
||||||
CheckUtil.checkDownloadUrl(downloadUrl);
|
CheckUtil.checkDownloadUrl(downloadUrl);
|
||||||
return DbEntity.findFirst(DownloadEntity.class, "downloadUrl=?", downloadUrl);
|
return DbEntity.findFirst(DownloadEntity.class, "downloadUrl=? and isGroupChild='false'",
|
||||||
|
downloadUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -146,13 +144,14 @@ public class DownloadReceiver extends AbsReceiver {
|
|||||||
*/
|
*/
|
||||||
public DownloadTaskEntity getDownloadTask(String downloadUrl) {
|
public DownloadTaskEntity getDownloadTask(String downloadUrl) {
|
||||||
CheckUtil.checkDownloadUrl(downloadUrl);
|
CheckUtil.checkDownloadUrl(downloadUrl);
|
||||||
return DbEntity.findFirst(DownloadTaskEntity.class, "key=?", downloadUrl);
|
return DbEntity.findFirst(DownloadTaskEntity.class, "key=? and isGroupTask='false'",
|
||||||
|
downloadUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过下载链接获取保存在数据库的下载任务组实体
|
* 通过下载链接获取保存在数据库的下载任务组实体
|
||||||
*/
|
*/
|
||||||
public DownloadGroupTaskEntity getDownlaodGroupTask(List<String> urls) {
|
public DownloadGroupTaskEntity getDownloadGroupTask(List<String> urls) {
|
||||||
CheckUtil.checkDownloadUrls(urls);
|
CheckUtil.checkDownloadUrls(urls);
|
||||||
String hashCode = CommonUtil.getMd5Code(urls);
|
String hashCode = CommonUtil.getMd5Code(urls);
|
||||||
return DbEntity.findFirst(DownloadGroupTaskEntity.class, "key=?", hashCode);
|
return DbEntity.findFirst(DownloadGroupTaskEntity.class, "key=?", hashCode);
|
||||||
@ -165,8 +164,18 @@ public class DownloadReceiver extends AbsReceiver {
|
|||||||
return DownloadEntity.findFirst(DownloadEntity.class, "downloadUrl=?", downloadUrl) != null;
|
return DownloadEntity.findFirst(DownloadEntity.class, "downloadUrl=?", downloadUrl) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取普通下载任务列表
|
||||||
|
*/
|
||||||
@Override public List<DownloadEntity> getTaskList() {
|
@Override public List<DownloadEntity> getTaskList() {
|
||||||
return DownloadEntity.findAllData(DownloadEntity.class);
|
return DownloadEntity.findDatas(DownloadEntity.class, "isGroupChild=?", "false");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取任务组列表
|
||||||
|
*/
|
||||||
|
public List<DownloadGroupTaskEntity> getGroupTaskList() {
|
||||||
|
return DownloadEntity.findAllData(DownloadGroupTaskEntity.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,12 +36,9 @@ public class DownloadTarget
|
|||||||
|
|
||||||
DownloadTarget(String url, String targetName) {
|
DownloadTarget(String url, String targetName) {
|
||||||
mTargetName = targetName;
|
mTargetName = targetName;
|
||||||
DownloadEntity entity = DbEntity.findFirst(DownloadEntity.class, "downloadUrl=?", url);
|
DownloadEntity entity = getEntity(url);
|
||||||
if (entity == null) {
|
mTaskEntity = DbEntity.findFirst(DownloadTaskEntity.class, "key=? and isGroupTask='false'",
|
||||||
entity = getEntity(url);
|
entity.getDownloadPath());
|
||||||
}
|
|
||||||
mEntity = entity;
|
|
||||||
mTaskEntity = DbEntity.findFirst(DownloadTaskEntity.class, "key=?", entity.getDownloadPath());
|
|
||||||
if (mTaskEntity == null) {
|
if (mTaskEntity == null) {
|
||||||
mTaskEntity = new DownloadTaskEntity();
|
mTaskEntity = new DownloadTaskEntity();
|
||||||
mTaskEntity.key = entity.getDownloadPath();
|
mTaskEntity.key = entity.getDownloadPath();
|
||||||
@ -49,8 +46,9 @@ public class DownloadTarget
|
|||||||
mTaskEntity.save();
|
mTaskEntity.save();
|
||||||
}
|
}
|
||||||
if (mTaskEntity.entity == null) {
|
if (mTaskEntity.entity == null) {
|
||||||
mTaskEntity.entity = mEntity;
|
mTaskEntity.entity = entity;
|
||||||
}
|
}
|
||||||
|
mEntity = entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -76,24 +76,23 @@ public class DownloadGroupUtil implements IDownloadUtil {
|
|||||||
* 文件信息回调组
|
* 文件信息回调组
|
||||||
*/
|
*/
|
||||||
private SparseArray<FileInfoThread.OnFileInfoCallback> mFileInfoCallbacks = new SparseArray<>();
|
private SparseArray<FileInfoThread.OnFileInfoCallback> mFileInfoCallbacks = new SparseArray<>();
|
||||||
|
|
||||||
//任务总数
|
|
||||||
private int mTaskNum = 0;
|
|
||||||
//已经完成的任务数
|
|
||||||
private int mCompleteNum = 0;
|
|
||||||
//失败的任务数
|
|
||||||
private int mFailNum = 0;
|
|
||||||
/**
|
/**
|
||||||
* 该任务组对应的所有任务
|
* 该任务组对应的所有任务
|
||||||
*/
|
*/
|
||||||
private Map<String, DownloadTaskEntity> mTasksMap = new HashMap<>();
|
private Map<String, DownloadTaskEntity> mTasksMap = new HashMap<>();
|
||||||
|
//已经完成的任务数
|
||||||
|
private int mCompleteNum = 0;
|
||||||
|
//失败的任务数
|
||||||
|
private int mFailNum = 0;
|
||||||
|
//实际的下载任务数
|
||||||
|
private int mActualTaskNum = 0;
|
||||||
|
|
||||||
public DownloadGroupUtil(IDownloadListener listener, DownloadGroupTaskEntity taskEntity) {
|
public DownloadGroupUtil(IDownloadListener listener, DownloadGroupTaskEntity taskEntity) {
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
mTaskEntity = taskEntity;
|
mTaskEntity = taskEntity;
|
||||||
mInfoPool = Executors.newCachedThreadPool();
|
mInfoPool = Executors.newCachedThreadPool();
|
||||||
mExePool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
|
mExePool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
|
||||||
mTaskNum = mTaskEntity.entity.getSubTask().size();
|
mActualTaskNum = mTaskEntity.entity.getSubTask().size();
|
||||||
List<DownloadTaskEntity> tasks =
|
List<DownloadTaskEntity> tasks =
|
||||||
DbEntity.findDatas(DownloadTaskEntity.class, "groupName=?", mTaskEntity.key);
|
DbEntity.findDatas(DownloadTaskEntity.class, "groupName=?", mTaskEntity.key);
|
||||||
if (tasks != null && !tasks.isEmpty()) {
|
if (tasks != null && !tasks.isEmpty()) {
|
||||||
@ -224,12 +223,14 @@ public class DownloadGroupUtil implements IDownloadUtil {
|
|||||||
mFailMap.put(url, te);
|
mFailMap.put(url, te);
|
||||||
mFileInfoCallbacks.put(te.hashCode(), this);
|
mFileInfoCallbacks.put(te.hashCode(), this);
|
||||||
}
|
}
|
||||||
mInitFailNum++;
|
|
||||||
//404链接不重试下载
|
//404链接不重试下载
|
||||||
if (!errorMsg.contains("错误码:404")) {
|
if (failNum < 10 && !errorMsg.contains("错误码:404") && !errorMsg.contains(
|
||||||
if (failNum < 10) {
|
"UnknownHostException")) {
|
||||||
mInfoPool.execute(createFileInfoThread(te));
|
mInfoPool.execute(createFileInfoThread(te));
|
||||||
}
|
} else {
|
||||||
|
mInitFailNum++;
|
||||||
|
mActualTaskNum--;
|
||||||
|
if (mActualTaskNum < 0) mActualTaskNum = 0;
|
||||||
}
|
}
|
||||||
failNum++;
|
failNum++;
|
||||||
if (mInitNum + mInitFailNum == mTaskEntity.getEntity().getSubTask().size()) {
|
if (mInitNum + mInitFailNum == mTaskEntity.getEntity().getSubTask().size()) {
|
||||||
@ -238,7 +239,6 @@ public class DownloadGroupUtil implements IDownloadUtil {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return new FileInfoThread(taskEntity, callback);
|
return new FileInfoThread(taskEntity, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,7 +349,7 @@ public class DownloadGroupUtil implements IDownloadUtil {
|
|||||||
@Override public void onComplete() {
|
@Override public void onComplete() {
|
||||||
saveData(IEntity.STATE_COMPLETE, entity.getFileSize());
|
saveData(IEntity.STATE_COMPLETE, entity.getFileSize());
|
||||||
mCompleteNum++;
|
mCompleteNum++;
|
||||||
if (mCompleteNum >= mTaskNum) {
|
if (mCompleteNum + mFailNum >= mActualTaskNum) {
|
||||||
mListener.onComplete();
|
mListener.onComplete();
|
||||||
closeTimer();
|
closeTimer();
|
||||||
}
|
}
|
||||||
@ -368,6 +368,8 @@ public class DownloadGroupUtil implements IDownloadUtil {
|
|||||||
if (entity.getFailNum() < 5) {
|
if (entity.getFailNum() < 5) {
|
||||||
Downloader dt = mDownloaderMap.get(entity.getDownloadUrl());
|
Downloader dt = mDownloaderMap.get(entity.getDownloadUrl());
|
||||||
dt.startDownload();
|
dt.startDownload();
|
||||||
|
} else {
|
||||||
|
mFailNum++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ import java.util.Map;
|
|||||||
public class DBConfig {
|
public class DBConfig {
|
||||||
static Map<String, Class> mapping = new HashMap<>();
|
static Map<String, Class> mapping = new HashMap<>();
|
||||||
static String DB_NAME;
|
static String DB_NAME;
|
||||||
static int VERSION = 8;
|
static int VERSION = 9;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
if (TextUtils.isEmpty(DB_NAME)) {
|
if (TextUtils.isEmpty(DB_NAME)) {
|
||||||
|
@ -375,7 +375,6 @@ final class SqlHelper extends SQLiteOpenHelper {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存一对一的数据
|
* 保存一对一的数据
|
||||||
* @param field
|
|
||||||
*/
|
*/
|
||||||
private void saveOneToOneFile(Field field) {
|
private void saveOneToOneFile(Field field) {
|
||||||
|
|
||||||
@ -498,7 +497,8 @@ final class SqlHelper extends SQLiteOpenHelper {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (isPrimary(field)) {
|
if (isPrimary(field)) {
|
||||||
sb.append(" PRIMARY KEY");
|
//sb.append(" PRIMARY KEY");
|
||||||
|
sb.append(" NOT NULL");
|
||||||
}
|
}
|
||||||
sb.append(",");
|
sb.append(",");
|
||||||
}
|
}
|
||||||
|
@ -21,5 +21,25 @@ package com.arialyy.annotations;
|
|||||||
|
|
||||||
public interface AriaConstance {
|
public interface AriaConstance {
|
||||||
String NO_URL = "";
|
String NO_URL = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注解方法为普通任务下载
|
||||||
|
*/
|
||||||
|
int DOWNLOAD = 0xa1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注解方法为任务组下载
|
||||||
|
*/
|
||||||
|
int DOWNLOAD_GROUP = 0xa2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注解方法为普通任务上传
|
||||||
|
*/
|
||||||
|
int UPLOAD = 0xb1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注解方法为任务组上传
|
||||||
|
*/
|
||||||
|
int UPLOAD_GROUP = 0xb2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,27 +16,16 @@
|
|||||||
|
|
||||||
package com.arialyy.simple.download;
|
package com.arialyy.simple.download;
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.Handler;
|
|
||||||
import com.arialyy.aria.core.Aria;
|
|
||||||
import com.arialyy.aria.core.download.DownloadEntity;
|
import com.arialyy.aria.core.download.DownloadEntity;
|
||||||
import com.arialyy.aria.util.CommonUtil;
|
|
||||||
import com.arialyy.frame.util.AndroidUtils;
|
|
||||||
import com.arialyy.frame.util.StringUtil;
|
|
||||||
import com.arialyy.frame.util.show.L;
|
|
||||||
import com.arialyy.simple.R;
|
import com.arialyy.simple.R;
|
||||||
import com.arialyy.simple.download.multi_download.FileListEntity;
|
import com.arialyy.simple.download.multi_download.FileListEntity;
|
||||||
import com.arialyy.simple.base.BaseModule;
|
import com.arialyy.simple.base.BaseModule;
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Lyy on 2016/9/27.
|
* Created by Lyy on 2016/9/27.
|
||||||
|
@ -25,7 +25,6 @@ import com.arialyy.aria.core.Aria;
|
|||||||
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
||||||
import com.arialyy.aria.core.download.DownloadGroupTask;
|
import com.arialyy.aria.core.download.DownloadGroupTask;
|
||||||
import com.arialyy.aria.core.download.DownloadGroupTaskEntity;
|
import com.arialyy.aria.core.download.DownloadGroupTaskEntity;
|
||||||
import com.arialyy.aria.util.CommonUtil;
|
|
||||||
import com.arialyy.frame.util.show.L;
|
import com.arialyy.frame.util.show.L;
|
||||||
import com.arialyy.frame.util.show.T;
|
import com.arialyy.frame.util.show.T;
|
||||||
import com.arialyy.simple.R;
|
import com.arialyy.simple.R;
|
||||||
@ -48,14 +47,18 @@ public class DownloadGroupActivity extends BaseActivity<ActivityDownloadGroupBin
|
|||||||
Aria.download(this).register();
|
Aria.download(this).register();
|
||||||
setTitle("任务组");
|
setTitle("任务组");
|
||||||
mUrls = getModule(GroupModule.class).getUrls();
|
mUrls = getModule(GroupModule.class).getUrls();
|
||||||
DownloadGroupTaskEntity entity = Aria.download(this).getDownlaodGroupTask(mUrls);
|
DownloadGroupTaskEntity entity = Aria.download(this).getDownloadGroupTask(mUrls);
|
||||||
if (entity != null && entity.getEntity() != null) {
|
if (entity != null && entity.getEntity() != null) {
|
||||||
DownloadGroupEntity groupEntity = entity.getEntity();
|
DownloadGroupEntity groupEntity = entity.getEntity();
|
||||||
getBinding().setFileSize(groupEntity.getConvertFileSize());
|
getBinding().setFileSize(groupEntity.getConvertFileSize());
|
||||||
|
if (groupEntity.getFileSize() == 0) {
|
||||||
|
getBinding().setProgress(0);
|
||||||
|
} else {
|
||||||
getBinding().setProgress(groupEntity.isComplete() ? 100
|
getBinding().setProgress(groupEntity.isComplete() ? 100
|
||||||
: (int) (groupEntity.getCurrentProgress() * 100 / groupEntity.getFileSize()));
|
: (int) (groupEntity.getCurrentProgress() * 100 / groupEntity.getFileSize()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override protected int setLayoutId() {
|
@Override protected int setLayoutId() {
|
||||||
return R.layout.activity_download_group;
|
return R.layout.activity_download_group;
|
||||||
|
@ -19,7 +19,6 @@ package com.arialyy.simple.download.multi_download;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.support.v7.widget.Toolbar;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
@ -28,7 +27,6 @@ import com.arialyy.aria.core.Aria;
|
|||||||
import com.arialyy.aria.core.download.DownloadEntity;
|
import com.arialyy.aria.core.download.DownloadEntity;
|
||||||
import com.arialyy.aria.core.download.DownloadTask;
|
import com.arialyy.aria.core.download.DownloadTask;
|
||||||
import com.arialyy.frame.util.show.L;
|
import com.arialyy.frame.util.show.L;
|
||||||
import com.arialyy.frame.util.show.T;
|
|
||||||
import com.arialyy.simple.R;
|
import com.arialyy.simple.R;
|
||||||
import com.arialyy.simple.base.BaseActivity;
|
import com.arialyy.simple.base.BaseActivity;
|
||||||
import com.arialyy.simple.databinding.ActivityMultiDownloadBinding;
|
import com.arialyy.simple.databinding.ActivityMultiDownloadBinding;
|
||||||
|
Reference in New Issue
Block a user