diff --git a/.github/ISSUE_TEMPLATE/Custom.md b/.github/ISSUE_TEMPLATE/Custom.md index 3b996c91..d7cd735b 100644 --- a/.github/ISSUE_TEMPLATE/Custom.md +++ b/.github/ISSUE_TEMPLATE/Custom.md @@ -5,17 +5,16 @@ about: 描述你遇到的问题或bug --- ## 版本号 -~ + ## 什么问题 -~ + ## 如何复现此问题 -~ + ## 手机型号 -~ -## 控制台日志 -(github的issues支持图片直接粘贴复制) -~ + +## 控制台日志(越完整越好) + diff --git a/Aria/src/main/java/com/arialyy/aria/core/Aria.java b/Aria/src/main/java/com/arialyy/aria/core/Aria.java index 517d11ef..3263ada6 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/Aria.java +++ b/Aria/src/main/java/com/arialyy/aria/core/Aria.java @@ -86,6 +86,9 @@ import com.arialyy.aria.util.ALog; * @param obj 观察者对象,为本类对象,使用{@code this} */ public static DownloadReceiver download(Object obj) { + if (AriaManager.getInstance() != null){ + return AriaManager.getInstance().download(obj); + } return get(convertContext(obj)).download(obj); } @@ -97,6 +100,9 @@ import com.arialyy.aria.util.ALog; * @param obj 观察者对象,为本类对象,使用{@code this} */ public static UploadReceiver upload(Object obj) { + if (AriaManager.getInstance() != null){ + return AriaManager.getInstance().upload(obj); + } return get(convertContext(obj)).upload(obj); } @@ -105,7 +111,8 @@ import com.arialyy.aria.util.ALog; */ public static AriaManager get(Context context) { if (context == null) { - throw new NullPointerException("context 无效,请使用 download(this) 或 upload(this);" + throw new NullPointerException("context 无效,在非【Activity、Service、Application、DialogFragment、Fragment、PopupWindow、Dialog】," + + "请参考【https://aria.laoyuyu.me/aria_doc/start/any_java.html】,参数请使用 download(this) 或 upload(this);" + "不要使用 download(getContext()) 或 upload(getContext())"); } return AriaManager.getInstance(context); 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 b5d45a8f..940b05cf 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java +++ b/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java @@ -96,9 +96,9 @@ import org.xml.sax.SAXException; } static AriaManager getInstance() { - if (INSTANCE == null) { - throw new NullPointerException("请在Application或Activity初始化时调用一次Aria.init(context)方法进行初始化操作"); - } + //if (INSTANCE == null) { + // throw new NullPointerException("请在Application或Activity初始化时调用一次Aria.init(context)方法进行初始化操作"); + //} return INSTANCE; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/normal/ResumeAllCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/normal/ResumeAllCmd.java index c87cad90..03c6a823 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/normal/ResumeAllCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/normal/ResumeAllCmd.java @@ -27,6 +27,7 @@ import java.util.List; * 1.如果执行队列没有满,则开始下载任务,直到执行队列满 * 2.如果队列执行队列已经满了,则将所有任务添加到等待队列中 * 3.如果队列中只有等待状态的任务,如果执行队列没有满,则会启动等待状态的任务,如果执行队列已经满了,则会将所有等待状态的任务加载到缓存队列中 + * 4.恢复下载的任务规则是,停止时间越晚的任务启动越早,安装DESC来进行排序 */ final class ResumeAllCmd extends AbsNormalCmd { private List mWaitList = new ArrayList<>(); @@ -61,7 +62,7 @@ final class ResumeAllCmd extends AbsNormalCmd { if (type == 1) { List entities = DbEntity.findDatas(DownloadEntity.class, - "isGroupChild=? and state!=?", "false", "1"); + "isGroupChild=? AND state!=? ORDER BY stopTime DESC", "false", "1"); if (entities != null && !entities.isEmpty()) { for (DownloadEntity entity : entities) { resumeTask(TEManager.getInstance().getTEntity(DownloadTaskEntity.class, entity.getKey())); @@ -69,7 +70,7 @@ final class ResumeAllCmd extends AbsNormalCmd { } } else if (type == 2) { List entities = - DbEntity.findDatas(DownloadGroupEntity.class, "state!=?", "1"); + DbEntity.findDatas(DownloadGroupEntity.class, "state!=? ORDER BY stopTime DESC", "1"); if (entities != null && !entities.isEmpty()) { for (DownloadGroupEntity entity : entities) { resumeTask( @@ -78,7 +79,7 @@ final class ResumeAllCmd extends AbsNormalCmd { } } else if (type == 3) { List entities = - DbEntity.findDatas(UploadEntity.class, "state!=?", "1"); + DbEntity.findDatas(UploadEntity.class, "state!=? ORDER BY stopTime DESC", "1"); if (entities != null && !entities.isEmpty()) { for (UploadEntity entity : entities) { resumeTask(TEManager.getInstance().getTEntity(UploadTaskEntity.class, entity.getKey())); 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 99956f21..98af3f94 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 @@ -509,6 +509,7 @@ public abstract class AbsFileer { public DownloadTask build() { DownloadTask task = new DownloadTask(taskEntity, outHandler); task.setTargetName(targetName); - taskEntity.save(); return task; } } 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 01726e0c..2a398625 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 @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.download.downloader; +import android.util.Log; import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.common.IUtil; import com.arialyy.aria.core.download.DownloadEntity; @@ -259,7 +260,7 @@ public abstract class AbsGroupUtil implements IUtil { dt.stop(); } } - if (mDownloaderMap.size() == 0){ + if (mDownloaderMap.size() == 0) { mListener.onStop(mCurrentLocation); } } @@ -540,6 +541,8 @@ public abstract class AbsGroupUtil implements IUtil { if (state == IEntity.STATE_CANCEL) { subEntity.deleteData(); return; + } else if (state == IEntity.STATE_STOP) { + subEntity.setStopTime(System.currentTimeMillis()); } else if (subEntity.isComplete()) { subEntity.setCompleteTime(System.currentTimeMillis()); subEntity.setCurrentProgress(subEntity.getFileSize()); diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsEntity.java b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsEntity.java index 34e3367e..119501d3 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsEntity.java @@ -70,6 +70,11 @@ public abstract class AbsEntity extends DbEntity implements IEntity, Parcelable private boolean isComplete = false; + /** + * 上一次停止时间 + */ + private long stopTime = 0; + public boolean isComplete() { return isComplete; } @@ -158,6 +163,14 @@ public abstract class AbsEntity extends DbEntity implements IEntity, Parcelable this.percent = percent; } + public long getStopTime() { + return stopTime; + } + + public void setStopTime(long stopTime) { + this.stopTime = stopTime; + } + /** * 实体唯一标识符 */ @@ -188,8 +201,9 @@ public abstract class AbsEntity extends DbEntity implements IEntity, Parcelable dest.writeInt(this.state); dest.writeLong(this.currentProgress); dest.writeLong(this.completeTime); - dest.writeByte(this.isComplete ? (byte) 1 : (byte) 0); dest.writeInt(this.percent); + dest.writeByte(this.isComplete ? (byte) 1 : (byte) 0); + dest.writeLong(this.stopTime); } protected AbsEntity(Parcel in) { @@ -202,7 +216,8 @@ public abstract class AbsEntity extends DbEntity implements IEntity, Parcelable this.state = in.readInt(); this.currentProgress = in.readLong(); this.completeTime = in.readLong(); - this.isComplete = in.readByte() != 0; this.percent = in.readInt(); + this.isComplete = in.readByte() != 0; + this.stopTime = in.readLong(); } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/BaseUListener.java b/Aria/src/main/java/com/arialyy/aria/core/upload/BaseUListener.java index 00622cf3..e561b5e2 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/BaseUListener.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/BaseUListener.java @@ -19,8 +19,6 @@ import android.os.Handler; import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.common.TaskRecord; import com.arialyy.aria.core.inf.AbsEntity; -import com.arialyy.aria.core.inf.AbsGroupEntity; -import com.arialyy.aria.core.inf.AbsNormalEntity; import com.arialyy.aria.core.inf.AbsTask; import com.arialyy.aria.core.inf.AbsTaskEntity; import com.arialyy.aria.core.inf.IEntity; @@ -155,6 +153,8 @@ class BaseUListener mapping = new HashMap<>(); static String DB_NAME; - static int VERSION = 33; + static int VERSION = 34; /** * 是否将数据库保存在Sd卡,{@code true} 是 diff --git a/Aria/src/main/java/com/arialyy/aria/util/NetUtils.java b/Aria/src/main/java/com/arialyy/aria/util/NetUtils.java index 95942a5d..bf398135 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/NetUtils.java +++ b/Aria/src/main/java/com/arialyy/aria/util/NetUtils.java @@ -51,6 +51,7 @@ public class NetUtils { /** * 判断网络是否连接 + * @return {@code true} 网络已连接、{@code false}网络未连接 */ public static boolean isConnected(Context context) { ConnectivityManager cm = diff --git a/DEV_LOG.md b/DEV_LOG.md index 5098f4fa..45878274 100644 --- a/DEV_LOG.md +++ b/DEV_LOG.md @@ -1,6 +1,8 @@ ## 开发日志 + v_3.4.3 - 修复在activity 的onStop中取消注册导致的内存泄露问题 + - fix bug https://github.com/AriaLyy/Aria/issues/258 + - fix bug https://github.com/AriaLyy/Aria/issues/259 + v_3.4.2 - fix bug https://github.com/AriaLyy/Aria/issues/248 - fix bug https://github.com/AriaLyy/Aria/issues/247 diff --git a/README.md b/README.md index 4e286f6f..434b4e28 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,8 @@ Aria有以下特点: [![Download](https://api.bintray.com/packages/arialyy/maven/AriaApi/images/download.svg)](https://bintray.com/arialyy/maven/AriaApi/_latestVersion) [![Download](https://api.bintray.com/packages/arialyy/maven/AriaCompiler/images/download.svg)](https://bintray.com/arialyy/maven/AriaCompiler/_latestVersion) ```java -compile 'com.arialyy.aria:aria-core:3.4.2' -annotationProcessor 'com.arialyy.aria:aria-compiler:3.4.2' +compile 'com.arialyy.aria:aria-core:3.4.3' +annotationProcessor 'com.arialyy.aria:aria-compiler:3.4.3' ``` 如果出现android support,请将 `compile 'com.arialyy.aria:aria-core:'`替换为 ``` @@ -99,15 +99,10 @@ protected void onCreate(Bundle savedInstanceState) { ### 版本日志 - + v_3.4.2 - - fix bug https://github.com/AriaLyy/Aria/issues/248 - - fix bug https://github.com/AriaLyy/Aria/issues/247 - - fix bug https://github.com/AriaLyy/Aria/issues/250 - - 添加任务判断是否存在的api - - 添加代理api - - 修复删除所有没有进出等待的问题 - - 进度有时出错的问题 - - FTP添加超时处理 + + v_3.4.3 + - 修复在activity 的onStop中取消注册导致的内存泄露问题 + - fix bug https://github.com/AriaLyy/Aria/issues/258 + - fix bug https://github.com/AriaLyy/Aria/issues/259 [更多版本记录](https://github.com/AriaLyy/Aria/blob/master/DEV_LOG.md) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ae9d6fd3..61c8d72b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,12 +14,12 @@ android:supportsRtl="true" android:theme="@style/AppTheme.NoActionBar"> - + diff --git a/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java b/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java index 21b27176..16fc2b0f 100644 --- a/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java +++ b/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java @@ -89,7 +89,7 @@ public class DownloadGroupActivity extends BaseActivity