初始化Aria时会将所有数据库状态为下载中的任务改为已停止,防止应用被kill后,任务状态错误, 初始化时自动判断文件是否被删除,文件被删除的任务将自动重置默认值
This commit is contained in:
@@ -30,12 +30,15 @@ import com.arialyy.aria.core.command.ICmd;
|
||||
import com.arialyy.aria.core.common.QueueMod;
|
||||
import com.arialyy.aria.core.download.DownloadEntity;
|
||||
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
||||
import com.arialyy.aria.core.download.DownloadGroupTaskEntity;
|
||||
import com.arialyy.aria.core.download.DownloadReceiver;
|
||||
import com.arialyy.aria.core.download.DownloadTaskEntity;
|
||||
import com.arialyy.aria.core.inf.AbsReceiver;
|
||||
import com.arialyy.aria.core.inf.IReceiver;
|
||||
import com.arialyy.aria.core.inf.ReceiverType;
|
||||
import com.arialyy.aria.core.upload.UploadEntity;
|
||||
import com.arialyy.aria.core.upload.UploadReceiver;
|
||||
import com.arialyy.aria.core.upload.UploadTaskEntity;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import com.arialyy.aria.orm.DelegateWrapper;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
@@ -82,6 +85,7 @@ import org.xml.sax.SAXException;
|
||||
regAppLifeCallback(context);
|
||||
initConfig();
|
||||
initAria();
|
||||
amendTaskState();
|
||||
}
|
||||
|
||||
public static AriaManager getInstance(Context context) {
|
||||
@@ -94,9 +98,6 @@ import org.xml.sax.SAXException;
|
||||
}
|
||||
|
||||
static AriaManager getInstance() {
|
||||
//if (INSTANCE == null) {
|
||||
// throw new NullPointerException("请在Application或Activity初始化时调用一次Aria.init(context)方法进行初始化操作");
|
||||
//}
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
@@ -121,6 +122,21 @@ import org.xml.sax.SAXException;
|
||||
mAConfig.setLogLevel(mAConfig.getLogLevel());
|
||||
}
|
||||
|
||||
/**
|
||||
* 修正任务状态
|
||||
*/
|
||||
private void amendTaskState() {
|
||||
Class[] clazzs = new Class[] {
|
||||
DownloadEntity.class, UploadEntity.class, DownloadGroupEntity.class,
|
||||
DownloadTaskEntity.class, UploadTaskEntity.class, DownloadGroupTaskEntity.class
|
||||
};
|
||||
String sql = "UPDATE %s SET state=2 WHERE state=4";
|
||||
for (Class clazz : clazzs) {
|
||||
String temp = String.format(sql, clazz.getSimpleName());
|
||||
DbEntity.exeSql(temp);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, AbsReceiver> getReceiver() {
|
||||
return mReceivers;
|
||||
}
|
||||
@@ -136,8 +152,7 @@ import org.xml.sax.SAXException;
|
||||
* @param mod {@link QueueMod}
|
||||
* @deprecated 后续版本会删除该api
|
||||
*/
|
||||
@Deprecated
|
||||
public AriaManager setUploadQueueMod(QueueMod mod) {
|
||||
@Deprecated public AriaManager setUploadQueueMod(QueueMod mod) {
|
||||
mUConfig.setQueueMod(mod.tag);
|
||||
return this;
|
||||
}
|
||||
@@ -153,8 +168,7 @@ import org.xml.sax.SAXException;
|
||||
* @param mod {@link QueueMod}
|
||||
* @deprecated 后续版本会删除该api
|
||||
*/
|
||||
@Deprecated
|
||||
public AriaManager setDownloadQueueMod(QueueMod mod) {
|
||||
@Deprecated public AriaManager setDownloadQueueMod(QueueMod mod) {
|
||||
mDConfig.setQueueMod(mod.tag);
|
||||
return this;
|
||||
}
|
||||
@@ -351,7 +365,8 @@ import org.xml.sax.SAXException;
|
||||
*
|
||||
* @param type {@link ReceiverType}
|
||||
* @param obj 观察者对象
|
||||
* @return key的格式为:{@code String.format("%s_%s_%s", obj.getClass().getName(), type, obj.hashCode());}
|
||||
* @return key的格式为:{@code String.format("%s_%s_%s", obj.getClass().getName(), type,
|
||||
* obj.hashCode());}
|
||||
*/
|
||||
private String createKey(@ReceiverType String type, Object obj) {
|
||||
return String.format("%s_%s_%s", obj.getClass().getName(), type, obj.hashCode());
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.arialyy.aria.core.download;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import com.arialyy.aria.core.common.TaskRecord;
|
||||
import com.arialyy.aria.core.manager.TEManager;
|
||||
import com.arialyy.aria.core.queue.DownloadTaskQueue;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
@@ -168,9 +169,9 @@ abstract class BaseNormalTarget<TARGET extends BaseNormalTarget>
|
||||
if (!forceDownload) {
|
||||
ALog.e(TAG, "下载失败,保存路径【" + filePath + "】已经被其它任务占用,请设置其它保存路径");
|
||||
return false;
|
||||
}else {
|
||||
ALog.d(TAG, "保存路径【" + filePath + "】已经被其它任务占用,当前任务将覆盖该路径的文件");
|
||||
DbEntity.deleteData(DownloadEntity.class, "downloadPath=?", filePath);
|
||||
} else {
|
||||
ALog.w(TAG, "保存路径【" + filePath + "】已经被其它任务占用,当前任务将覆盖该路径的文件");
|
||||
CommonUtil.delTaskRecord(filePath, 1);
|
||||
mTaskEntity = TEManager.getInstance().getTEntity(DownloadTaskEntity.class, url);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
package com.arialyy.aria.core.manager;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import com.arialyy.aria.core.common.AbsFileer;
|
||||
import com.arialyy.aria.core.common.TaskRecord;
|
||||
import com.arialyy.aria.core.download.DownloadEntity;
|
||||
import com.arialyy.aria.core.download.DownloadTaskEntity;
|
||||
import com.arialyy.aria.core.download.wrapper.DTEWrapper;
|
||||
@@ -57,7 +59,8 @@ class DTEFactory implements INormalTEFactory<DownloadEntity, DownloadTaskEntity>
|
||||
taskEntity = wrapper.get(0).taskEntity;
|
||||
if (taskEntity == null) {
|
||||
taskEntity = new DownloadTaskEntity();
|
||||
} else if (taskEntity.getEntity() == null || TextUtils.isEmpty(taskEntity.getEntity().getUrl())) {
|
||||
} else if (taskEntity.getEntity() == null || TextUtils.isEmpty(
|
||||
taskEntity.getEntity().getUrl())) {
|
||||
taskEntity.setEntity(entity);
|
||||
}
|
||||
} else {
|
||||
@@ -93,9 +96,37 @@ class DTEFactory implements INormalTEFactory<DownloadEntity, DownloadTaskEntity>
|
||||
entity.setDownloadPath(UUID.randomUUID().toString().replace("-", "")); //设置临时路径
|
||||
}
|
||||
File file = new File(entity.getDownloadPath());
|
||||
if (!file.exists()) {
|
||||
entity.setState(IEntity.STATE_WAIT);
|
||||
TaskRecord record =
|
||||
TaskRecord.findFirst(TaskRecord.class, "filePath=?", entity.getDownloadPath());
|
||||
if (record == null) {
|
||||
resetEntity(entity);
|
||||
} else {
|
||||
if (record.isBlock) {
|
||||
int count = 0;
|
||||
for (int i = 0, len = record.threadNum; i < len; i++) {
|
||||
File temp = new File(String.format(AbsFileer.SUB_PATH, record.filePath, i));
|
||||
if (!temp.exists()) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
if (count == record.threadNum) {
|
||||
resetEntity(entity);
|
||||
}
|
||||
} else if (!file.exists()) { // 非分块文件需要判断文件是否存在
|
||||
resetEntity(entity);
|
||||
}
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化下载实体
|
||||
*/
|
||||
private void resetEntity(DownloadEntity entity) {
|
||||
entity.setPercent(0);
|
||||
entity.setCompleteTime(0);
|
||||
entity.setComplete(false);
|
||||
entity.setCurrentProgress(0);
|
||||
entity.setState(IEntity.STATE_WAIT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -176,6 +176,14 @@ public abstract class DbEntity {
|
||||
return rowID != -1 && util.isExist(getClass(), rowID);
|
||||
}
|
||||
|
||||
/**
|
||||
* 表是否存在
|
||||
* @return {@code true} 存在
|
||||
*/
|
||||
public static boolean tableExists(Class<DbEntity> clazz){
|
||||
return DelegateWrapper.getInstance().tableExists(clazz);
|
||||
}
|
||||
|
||||
/**
|
||||
* 插入数据,只有 target中checkEntity成功后才能插入,创建实体部分也不允许操作
|
||||
*/
|
||||
|
||||
@@ -35,10 +35,12 @@ import com.arialyy.aria.core.common.AbsFileer;
|
||||
import com.arialyy.aria.core.common.TaskRecord;
|
||||
import com.arialyy.aria.core.download.DownloadEntity;
|
||||
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
||||
import com.arialyy.aria.core.download.DownloadTaskEntity;
|
||||
import com.arialyy.aria.core.inf.AbsGroupTaskEntity;
|
||||
import com.arialyy.aria.core.inf.AbsNormalEntity;
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.upload.UploadEntity;
|
||||
import com.arialyy.aria.core.upload.UploadTaskEntity;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import dalvik.system.DexFile;
|
||||
import java.io.File;
|
||||
@@ -567,6 +569,50 @@ public class CommonUtil {
|
||||
dEntity.deleteData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除任务记录,默认删除文件
|
||||
*
|
||||
* @param filePath 文件路径
|
||||
* @param type {@code 1}下载任务的记录,{@code 2} 上传任务的记录
|
||||
* {@code false}如果任务已经完成,只删除任务数据库记录
|
||||
*/
|
||||
public static void delTaskRecord(String filePath, int type) {
|
||||
if (TextUtils.isEmpty(filePath)) {
|
||||
throw new NullPointerException("删除记录失败,文件路径为空");
|
||||
}
|
||||
if (type != 1 && type != 2) {
|
||||
throw new IllegalArgumentException("任务记录类型错误");
|
||||
}
|
||||
TaskRecord record = DbEntity.findFirst(TaskRecord.class, "filePath=?", filePath);
|
||||
if (record == null) {
|
||||
ALog.w(TAG, "删除记录失败,记录为空");
|
||||
return;
|
||||
}
|
||||
File file = new File(filePath);
|
||||
// 删除分块文件
|
||||
if (record.isBlock) {
|
||||
for (int i = 0, len = record.threadNum; i < len; i++) {
|
||||
File partFile = new File(String.format(AbsFileer.SUB_PATH, record.filePath, i));
|
||||
if (partFile.exists()) {
|
||||
partFile.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
|
||||
record.deleteData();
|
||||
//下载任务实体和下载实体为一对一关系,下载实体删除,任务实体自动删除
|
||||
if (type == 1) {
|
||||
DbEntity.deleteData(DownloadTaskEntity.class, "key=?", filePath);
|
||||
DbEntity.deleteData(DownloadEntity.class, "downloadPath=?", filePath);
|
||||
}else {
|
||||
DbEntity.deleteData(UploadTaskEntity.class, "key=?", filePath);
|
||||
DbEntity.deleteData(UploadEntity.class, "filePath=?", filePath);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取CPU核心数
|
||||
*/
|
||||
@@ -705,8 +751,8 @@ public class CommonUtil {
|
||||
* @param taskType {@link ICmd#TASK_TYPE_DOWNLOAD}、{@link ICmd#TASK_TYPE_DOWNLOAD_GROUP}、{@link
|
||||
* ICmd#TASK_TYPE_UPLOAD}
|
||||
*/
|
||||
public static <T extends AbsTaskEntity> AbsNormalCmd createNormalCmd(T entity,
|
||||
int cmd, int taskType) {
|
||||
public static <T extends AbsTaskEntity> AbsNormalCmd createNormalCmd(T entity, int cmd,
|
||||
int taskType) {
|
||||
return NormalCmdFactory.getInstance().createCmd(entity, cmd, taskType);
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
- 优化logcat日志提示
|
||||
- 修改下载线程的优先级为`Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);`
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/319
|
||||
- 修复分卡下载失败的问题 https://github.com/AriaLyy/Aria/issues/326
|
||||
- 初始化Aria时会将所有数据库状态为下载中的任务改为已停止,防止应用被kill后,任务状态错误
|
||||
- 初始化时自动判断文件是否被删除,文件被删除的任务将自动重置默认值
|
||||
+ v_3.5.1
|
||||
- 优化`taskExists`方法
|
||||
- 添加`post`参数请求支持
|
||||
|
||||
@@ -55,13 +55,13 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
|
||||
//"https://yizi-kejian.oss-cn-beijing.aliyuncs.com/qimeng/package1/qmtable11.zip";
|
||||
//"http://rs.0.gaoshouyou.com/d/04/1e/400423a7551e1f3f0eb1812afa1f9b44.apk";
|
||||
//"http://58.210.9.131/tpk/sipgt//TDLYZTGH.tpk"; //chunked 下载
|
||||
//"https://static.donguo.me//video/ip/course/pfys_1.mp4";
|
||||
"https://static.donguo.me//video/ip/course/pfys_1.mp4";
|
||||
//"https://www.baidu.com/link?url=_LFCuTPtnzFxVJByJ504QymRywIA1Z_T5xUxe9ZLuxcGM0C_RcdpWyB1eGjbJC-e5wv5wAKM4WmLMAS5KeF6EZJHB8Va3YqZUiaErqK_pxm&wd=&eqid=e8583fe70002d126000000065a99f864";
|
||||
//"https://d.pcs.baidu.com/file/a02c89a2d479d4fd2756f3313d42491d?fid=4232431903-250528-1114369760340736&dstime=1525491372&rt=sh&sign=FDtAERVY-DCb740ccc5511e5e8fedcff06b081203-3C13vkOkuk4TqXvVYW05zj1K0ao%3D&expires=8h&chkv=1&chkbd=0&chkpc=et&dp-logid=8651730921842106225&dp-callid=0&r=165533013";
|
||||
//"http://apk500.bce.baidu-mgame.com/game/67000/67734/20170622040827_oem_5502845.apk?r=1";
|
||||
//"https://dl.genymotion.com/releases/genymotion-2.12.1/genymotion-2.12.1-vbox.exe";
|
||||
//"http://9.9.9.59:5000/download/CentOS-7-x86_64-Minimal-1804.iso";
|
||||
"https://firmwareapi.azurewebsites.net/firmware-overview?name=A19_Filament_W_IMG0038_00102411-encrypted.ota";
|
||||
//"https://firmwareapi.azurewebsites.net/firmware-overview?name=A19_Filament_W_IMG0038_00102411-encrypted.ota";
|
||||
@Bind(R.id.start) Button mStart;
|
||||
@Bind(R.id.stop) Button mStop;
|
||||
@Bind(R.id.cancel) Button mCancel;
|
||||
@@ -70,6 +70,7 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
|
||||
@Override protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
Aria.download(this).register();
|
||||
Log.d(TAG, "TAG========" + Aria.download(this).load(DOWNLOAD_URL).getTaskState() + "");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -39,7 +39,7 @@ task clean(type: Delete) {
|
||||
ext {
|
||||
userOrg = 'arialyy'
|
||||
groupId = 'com.arialyy.aria'
|
||||
publishVersion = '3.5.2_dev_4'
|
||||
publishVersion = '3.5.2_dev_5'
|
||||
// publishVersion = '1.0.4' //FTP插件
|
||||
repoName='maven'
|
||||
desc = 'android 下载框架'
|
||||
|
||||
Reference in New Issue
Block a user