diff --git a/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java b/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java index 2fe50163..fce1c3eb 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java +++ b/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java @@ -77,8 +77,8 @@ import org.xml.sax.SAXException; private Configuration.AppConfig mAConfig; private AriaManager(Context context) { - DelegateWrapper.init(context.getApplicationContext()); APP = context.getApplicationContext(); + initDb(APP); regAppLifeCallback(context); initConfig(); initAria(); @@ -100,6 +100,20 @@ import org.xml.sax.SAXException; return INSTANCE; } + private void initDb(Context context) { + String dbBase = context.getFilesDir().getPath() + context.getPackageName() + "/databases/"; + File db = new File(dbBase + "AriaLyyDb"); + File dbConfig = new File(dbBase + "AriaLyyDb-journal"); + if (db.exists()) { + db.renameTo(new File(dbBase + "AndroidAria.db")); + // 如果数据库是在/data/data/{packagename}/databases/下面,journal文件因权限问题将无法删除和重命名 + if (dbConfig.exists()) { + dbConfig.delete(); + } + } + DelegateWrapper.init(context.getApplicationContext()); + } + private void initAria() { if (mAConfig.getUseAriaCrashHandler()) { Thread.setDefaultUncaughtExceptionHandler(new AriaCrashHandler()); diff --git a/Aria/src/main/java/com/arialyy/aria/core/ConfigHelper.java b/Aria/src/main/java/com/arialyy/aria/core/ConfigHelper.java index 71211cd2..7f1a3d1a 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/ConfigHelper.java +++ b/Aria/src/main/java/com/arialyy/aria/core/ConfigHelper.java @@ -97,6 +97,9 @@ class ConfigHelper extends DefaultHandler { case "updateInterval": loadUpdateInterval(value); break; + case "notNetRetry": + loadNotNetRetry(value); + break; } } else if (isAppConfig) { String value = attributes.getValue("value"); @@ -111,6 +114,15 @@ class ConfigHelper extends DefaultHandler { } } + private void loadNotNetRetry(String value) { + if (isDownloadConfig) { + mDownloadConfig.notNetRetry = checkBoolean(value) ? Boolean.valueOf(value) : false; + } + if (isUploadConfig) { + mUploadConfig.notNetRetry = checkBoolean(value) ? Boolean.valueOf(value) : false; + } + } + private void loadLogLevel(String value) { int level; try { @@ -210,6 +222,10 @@ class ConfigHelper extends DefaultHandler { if (isDownloadConfig) { mDownloadConfig.buffSize = buffSize; } + + if (isUploadConfig){ + mUploadConfig.buffSize = buffSize; + } } private void loadIOTimeout(String value) { @@ -222,6 +238,10 @@ class ConfigHelper extends DefaultHandler { if (isDownloadConfig) { mDownloadConfig.iOTimeOut = time; } + + if (isUploadConfig) { + mUploadConfig.iOTimeOut = time; + } } private void loadConnectTime(String value) { diff --git a/Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java b/Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java index 6aafda03..e23a133a 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java +++ b/Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java @@ -118,7 +118,6 @@ public abstract class AbsFileer info) { - AriaManager manager = AriaManager.getInstance(AriaManager.APP); STATE = constance; - STATE.CONNECT_TIME_OUT = manager.getDownloadConfig().getConnectTimeOut(); - STATE.READ_TIME_OUT = manager.getDownloadConfig().getIOTimeOut(); mListener = listener; mConfig = info; mTaskEntity = mConfig.TASK_ENTITY; mEntity = mTaskEntity.getEntity(); - mBufSize = manager.getDownloadConfig().getBuffSize(); - setMaxSpeed(AriaManager.getInstance(AriaManager.APP).getDownloadConfig().getMaxSpeed()); mTaskType = getTaskType(); mLastSaveTime = System.currentTimeMillis(); mConfigThreadPool = Executors.newCachedThreadPool(); @@ -219,13 +217,14 @@ public abstract class AbsThreadTask { * 取消下载 */ @Override public void cancel() { - if (!mUtil.isRunning()) { + if (mUtil.isRunning()) { + mUtil.cancel(); + } else { mListener.onCancel(); } - mUtil.cancel(); } @Override public String getTaskName() { diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java index 45127ccc..991d50bd 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java @@ -234,7 +234,6 @@ public abstract class AbsGroupUtil implements IUtil { } } clearState(); - CommonUtil.delGroupTaskRecord(mGTEntity.isRemoveFile(), mGTEntity.getEntity()); mListener.onCancel(); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/Downloader.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/Downloader.java index 1546b44f..3eb63678 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/Downloader.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/Downloader.java @@ -23,7 +23,6 @@ import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.download.DownloadTaskEntity; import com.arialyy.aria.core.inf.AbsTaskEntity; import com.arialyy.aria.core.inf.IDownloadListener; -import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.BufferedRandomAccessFile; import com.arialyy.aria.util.CommonUtil; @@ -40,6 +39,7 @@ class Downloader extends AbsFileer { Downloader(IDownloadListener listener, DownloadTaskEntity taskEntity) { super(listener, taskEntity); + mTempFile = new File(mEntity.getDownloadPath()); setUpdateInterval( AriaManager.getInstance(AriaManager.APP).getDownloadConfig().getUpdateInterval()); } @@ -51,13 +51,6 @@ class Downloader extends AbsFileer { : AriaManager.getInstance(mContext).getDownloadConfig().getThreadNum(); } - @Override protected void checkTask() { - super.checkTask(); - mTempFile = new File(mEntity.getDownloadPath()); - mTaskEntity.setNewTask(!mTempFile.exists() - || DbEntity.findFirst(DownloadEntity.class, "url=?", mEntity.getUrl()) == null); - } - @Override protected boolean handleNewTask() { CommonUtil.createFile(mTempFile.getPath()); BufferedRandomAccessFile file = null; diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpThreadTask.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpThreadTask.java index 954d6be3..0ec1e326 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpThreadTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpThreadTask.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.download.downloader; +import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.common.AbsFtpThreadTask; import com.arialyy.aria.core.common.StateConstance; import com.arialyy.aria.core.common.SubThreadConfig; @@ -38,6 +39,12 @@ class FtpThreadTask extends AbsFtpThreadTask FtpThreadTask(StateConstance constance, IDownloadListener listener, SubThreadConfig downloadInfo) { super(constance, listener, downloadInfo); + AriaManager manager = AriaManager.getInstance(AriaManager.APP); + mConnectTimeOut = manager.getDownloadConfig().getConnectTimeOut(); + mReadTimeOut = manager.getDownloadConfig().getIOTimeOut(); + mBufSize = manager.getDownloadConfig().getBuffSize(); + isNotNetRetry = manager.getDownloadConfig().isNotNetRetry(); + setMaxSpeed(manager.getDownloadConfig().getMaxSpeed()); } @Override public void run() { diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpThreadTask.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpThreadTask.java index 8532dcbe..ce2366f5 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpThreadTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpThreadTask.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.download.downloader; +import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.common.AbsThreadTask; import com.arialyy.aria.core.common.StateConstance; import com.arialyy.aria.core.common.SubThreadConfig; @@ -42,6 +43,12 @@ final class HttpThreadTask extends AbsThreadTask downloadInfo) { super(constance, listener, downloadInfo); + AriaManager manager = AriaManager.getInstance(AriaManager.APP); + mConnectTimeOut = manager.getDownloadConfig().getConnectTimeOut(); + mReadTimeOut = manager.getDownloadConfig().getIOTimeOut(); + mBufSize = manager.getDownloadConfig().getBuffSize(); + isNotNetRetry = manager.getDownloadConfig().isNotNetRetry(); + setMaxSpeed(manager.getDownloadConfig().getMaxSpeed()); } @Override public void run() { @@ -70,8 +77,8 @@ final class HttpThreadTask extends AbsThreadTask reTryNum) { + if ((!NetUtils.isConnected(AriaManager.APP) && !isNotNetRetry) + || task.getTaskEntity().getEntity().getFailNum() > reTryNum) { callback(FAIL, task); mQueue.removeTaskFormQueue(task.getKey()); startNextTask(); @@ -284,6 +292,7 @@ abstract class AbsSchedulers { FtpThreadTask(StateConstance constance, IEventListener listener, SubThreadConfig info) { super(constance, listener, info); + AriaManager manager = AriaManager.getInstance(AriaManager.APP); + mConnectTimeOut = manager.getUploadConfig().getConnectTimeOut(); + mReadTimeOut = manager.getUploadConfig().getIOTimeOut(); + mBufSize = manager.getUploadConfig().getBuffSize(); + isNotNetRetry = manager.getUploadConfig().isNotNetRetry(); } @Override public void run() { diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/HttpThreadTask.java b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/HttpThreadTask.java index 6457da57..e0c4c641 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/HttpThreadTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/HttpThreadTask.java @@ -15,7 +15,7 @@ */ package com.arialyy.aria.core.upload.uploader; -import android.util.Log; +import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.common.AbsThreadTask; import com.arialyy.aria.core.common.StateConstance; import com.arialyy.aria.core.common.SubThreadConfig; @@ -52,6 +52,11 @@ class HttpThreadTask extends AbsThreadTask { HttpThreadTask(StateConstance constance, IUploadListener listener, SubThreadConfig uploadInfo) { super(constance, listener, uploadInfo); + AriaManager manager = AriaManager.getInstance(AriaManager.APP); + mConnectTimeOut = manager.getUploadConfig().getConnectTimeOut(); + mReadTimeOut = manager.getUploadConfig().getIOTimeOut(); + mBufSize = manager.getUploadConfig().getBuffSize(); + isNotNetRetry = manager.getUploadConfig().isNotNetRetry(); } @Override public void run() { @@ -74,10 +79,11 @@ class HttpThreadTask extends AbsThreadTask { mHttpConn.setRequestProperty("Content-Type", mTaskEntity.getContentType() + "; boundary=" + BOUNDARY); mHttpConn.setRequestProperty("User-Agent", mTaskEntity.getUserAgent()); - mHttpConn.setConnectTimeout(5000); + mHttpConn.setConnectTimeout(mConnectTimeOut); + mHttpConn.setReadTimeout(mReadTimeOut); //mHttpConn.setRequestProperty("Range", "bytes=" + 0 + "-" + "100"); //内部缓冲区---分段上传防止oom - mHttpConn.setChunkedStreamingMode(1024); + mHttpConn.setChunkedStreamingMode(mBufSize); //添加Http请求头部 Set keys = mTaskEntity.getHeaders().keySet(); diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java index db8c0cbe..64859186 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java @@ -39,13 +39,6 @@ class Uploader extends AbsFileer { AriaManager.getInstance(AriaManager.APP).getUploadConfig().getUpdateInterval()); } - protected void checkTask() { - super.checkTask(); - mTaskEntity.setNewTask( - DbEntity.findFirst(UploadEntity.class, "filePath=?", mEntity.getFilePath()) - == null); - } - @Override protected boolean handleNewTask() { return true; } diff --git a/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java b/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java index 08001178..480c41a5 100644 --- a/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java +++ b/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java @@ -44,7 +44,7 @@ class DBConfig { static { if (TextUtils.isEmpty(DB_NAME)) { - DB_NAME = "AriaLyyDb"; + DB_NAME = "AndroidAria.db"; } if (VERSION == -1) { VERSION = 1; diff --git a/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java b/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java index 7c8050e1..f71ee9f1 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java @@ -400,7 +400,7 @@ public class CommonUtil { /** * 删除任务记录 * - * @param removeFile {@code true} 不仅删除任务数据库记录,还会删除已经下载完成的文件 + * @param removeFile {@code true} 不仅删除任务数据库记录,还会删除已经完成的文件 * {@code false}如果任务已经完成,只删除任务数据库记录 */ public static void delTaskRecord(TaskRecord record, boolean removeFile, diff --git a/DEV_LOG.md b/DEV_LOG.md index 961a3125..9988e59f 100644 --- a/DEV_LOG.md +++ b/DEV_LOG.md @@ -1,4 +1,9 @@ ## 开发日志 + + v_3.4.1 + - 移除记录配置文件,改用数据库记录任务记录 + - 上传配置添加io超时时间、缓存大小配置 + - 添加没有网络也会重试的开关 + - 修复多次删除记录的bug + v_3.4 - 优化大量代码 - 重构Aria的ORM模型,提高了数据读取的可靠性和读写速度 diff --git a/app/src/main/assets/aria_config.xml b/app/src/main/assets/aria_config.xml index 3c437798..2d469d67 100644 --- a/app/src/main/assets/aria_config.xml +++ b/app/src/main/assets/aria_config.xml @@ -12,6 +12,9 @@ + + + @@ -48,6 +51,16 @@ + + + + + + + + + + @@ -55,7 +68,7 @@ - + diff --git a/app/src/main/java/com/arialyy/simple/test/AnyRunActivity.java b/app/src/main/java/com/arialyy/simple/test/AnyRunActivity.java index f80bd566..311f64e6 100644 --- a/app/src/main/java/com/arialyy/simple/test/AnyRunActivity.java +++ b/app/src/main/java/com/arialyy/simple/test/AnyRunActivity.java @@ -18,7 +18,9 @@ public class AnyRunActivity extends BaseActivity { AnyRunnModule module; String[] urls; int index = 0; - String URL = "http://static.gaoshouyou.com/d/12/0d/7f120f50c80d2e7b8c4ba24ece4f9cdd.apk"; + //String URL = "http://static.gaoshouyou.com/d/12/0d/7f120f50c80d2e7b8c4ba24ece4f9cdd.apk"; + String URL = "http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk"; + //String URL = "https://dl.genymotion.com/releases/genymotion-2.12.1/genymotion-2.12.1-vbox.exe"; @Override protected int setLayoutId() { return R.layout.activity_test; @@ -47,8 +49,7 @@ public class AnyRunActivity extends BaseActivity { case R.id.stop: //List list = Aria.download(this).getTotalTaskList(); // - ////module.stop(); - //module.stop(URL); + module.stop(URL); break; case R.id.cancel: diff --git a/app/src/main/java/com/arialyy/simple/test/AnyRunnModule.java b/app/src/main/java/com/arialyy/simple/test/AnyRunnModule.java index 4b583b98..b43a421e 100644 --- a/app/src/main/java/com/arialyy/simple/test/AnyRunnModule.java +++ b/app/src/main/java/com/arialyy/simple/test/AnyRunnModule.java @@ -69,7 +69,7 @@ public class AnyRunnModule { .load(url) .addHeader("Accept-Encoding", "gzip") .setRequestMode(RequestEnum.GET) - .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/ggsg1234.apk") + .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/ggsg123456.apk") .resetState() .start(); } diff --git a/aria/src/main/java/com/arialyy/aria/core/Configuration.java b/aria/src/main/java/com/arialyy/aria/core/Configuration.java index d6382c66..56c7eebd 100644 --- a/aria/src/main/java/com/arialyy/aria/core/Configuration.java +++ b/aria/src/main/java/com/arialyy/aria/core/Configuration.java @@ -192,6 +192,12 @@ class Configuration { * 通用任务配置 */ abstract static class BaseTaskConfig extends BaseConfig { + + /** + * 设置写文件buff大小,该数值大小不能小于2048,数值变小,下载速度会变慢 + */ + int buffSize = 8192; + /** * 进度刷新间隔,默认1秒 */ @@ -231,6 +237,16 @@ class Configuration { */ String queueMod = "wait"; + /** + * 断网的时候是否重试,{@code true}断网也重试;{@code false}断网不重试,直接走失败的回调 + */ + boolean notNetRetry = false; + + /** + * 设置IO流读取时间,单位为毫秒,默认20000毫秒,该时间不能少于10000毫秒 + */ + int iOTimeOut = 20 * 1000; + public long getUpdateInterval() { return updateInterval; } @@ -303,20 +319,43 @@ class Configuration { saveKey("connectTimeOut", String.valueOf(connectTimeOut)); return this; } + + public boolean isNotNetRetry() { + return notNetRetry; + } + + public BaseTaskConfig setNotNetRetry(boolean notNetRetry) { + this.notNetRetry = notNetRetry; + saveKey("notNetRetry", String.valueOf(notNetRetry)); + return this; + } + + public int getIOTimeOut() { + return iOTimeOut; + } + + public BaseTaskConfig setIOTimeOut(int iOTimeOut) { + this.iOTimeOut = iOTimeOut; + saveKey("iOTimeOut", String.valueOf(iOTimeOut)); + return this; + } + + public int getBuffSize() { + return buffSize; + } + + public BaseTaskConfig setBuffSize(int buffSize) { + this.buffSize = buffSize; + saveKey("buffSize", String.valueOf(buffSize)); + return this; + } } /** * 下载配置 */ public static class DownloadConfig extends BaseTaskConfig { - /** - * 设置IO流读取时间,单位为毫秒,默认20000毫秒,该时间不能少于10000毫秒 - */ - int iOTimeOut = 20 * 1000; - /** - * 设置写文件buff大小,该数值大小不能小于2048,数值变小,下载速度会变慢 - */ - int buffSize = 8192; + /** * 设置https ca 证书信息;path 为assets目录下的CA证书完整路径 */ @@ -343,10 +382,6 @@ class Configuration { return this; } - public int getIOTimeOut() { - return iOTimeOut; - } - public int getMaxSpeed() { return maxSpeed; } @@ -363,22 +398,6 @@ class Configuration { saveKey("threadNum", String.valueOf(threadNum)); } - public DownloadConfig setIOTimeOut(int iOTimeOut) { - this.iOTimeOut = iOTimeOut; - saveKey("iOTimeOut", String.valueOf(iOTimeOut)); - return this; - } - - public int getBuffSize() { - return buffSize; - } - - public DownloadConfig setBuffSize(int buffSize) { - this.buffSize = buffSize; - saveKey("buffSize", String.valueOf(buffSize)); - return this; - } - public String getCaPath() { return caPath; } diff --git a/aria/src/main/java/com/arialyy/aria/core/upload/UploadTask.java b/aria/src/main/java/com/arialyy/aria/core/upload/UploadTask.java index 8e0e4e87..1cadfa4a 100644 --- a/aria/src/main/java/com/arialyy/aria/core/upload/UploadTask.java +++ b/aria/src/main/java/com/arialyy/aria/core/upload/UploadTask.java @@ -68,10 +68,11 @@ public class UploadTask extends AbsNormalTask { } @Override public void cancel() { - if (!mUtil.isRunning()) { + if (mUtil.isRunning()) { + mUtil.cancel(); + } else { mListener.onCancel(); } - mUtil.cancel(); } @Override public String getTaskName() {