From 746e8752bda0d349919889ccb99bcafc3f9c22e9 Mon Sep 17 00:00:00 2001 From: AriaLyy <511455842@qq.com> Date: Wed, 12 Jul 2017 18:07:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=BB=84bug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aria/core/download/DownloadEntity.java | 17 +-- .../core/download/DownloadGroupTarget.java | 3 - .../aria/core/download/DownloadGroupTask.java | 11 +- .../aria/core/download/DownloadTarget.java | 19 ++- .../aria/core/download/DownloadTask.java | 4 +- .../core/download/DownloadTaskEntity.java | 12 +- .../downloader/DownloadGroupUtil.java | 52 ++++++-- .../core/download/downloader/Downloader.java | 1 + .../downloader/SimpleDownloadUtil.java | 2 - .../com/arialyy/aria/core/inf/AbsEntity.java | 13 ++ .../arialyy/aria/core/inf/AbsGroupTarget.java | 10 +- .../arialyy/aria/core/inf/AbsTaskEntity.java | 3 +- .../aria/core/queue/DownloadTaskQueue.java | 2 +- .../aria/core/upload/UploadEntity.java | 10 -- .../com/arialyy/aria/util/CommonUtil.java | 25 +++- .../simple/download/SingleTaskActivity.java | 121 +++++------------- .../download/group/DownloadGroupActivity.java | 7 +- .../simple/download/group/GroupModule.java | 3 +- app/src/main/res/values/strings.xml | 2 + 19 files changed, 157 insertions(+), 160 deletions(-) diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java index 9b7ad44f..b55b7f00 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java @@ -27,9 +27,8 @@ import com.arialyy.aria.orm.Primary; * 下载实体 */ public class DownloadEntity extends AbsNormalEntity implements Parcelable { - @Primary private String downloadUrl = ""; //下载路径 - private String downloadPath = ""; //保存路径 - private boolean isDownloadComplete = false; //是否下载完成 + private String downloadUrl = ""; //下载路径 + @Primary private String downloadPath = ""; //保存路径 private boolean isRedirect = false; //是否重定向 private String redirectUrl = ""; //重定向链接 @@ -65,8 +64,6 @@ public class DownloadEntity extends AbsNormalEntity implements Parcelable { + ", downloadPath='" + downloadPath + '\'' - + ", isDownloadComplete=" - + isDownloadComplete + ", isRedirect=" + isRedirect + ", redirectUrl='" @@ -137,14 +134,6 @@ public class DownloadEntity extends AbsNormalEntity implements Parcelable { return this; } - public boolean isDownloadComplete() { - return isDownloadComplete; - } - - public void setDownloadComplete(boolean downloadComplete) { - isDownloadComplete = downloadComplete; - } - @Override public DownloadEntity clone() throws CloneNotSupportedException { return (DownloadEntity) super.clone(); } @@ -173,7 +162,6 @@ public class DownloadEntity extends AbsNormalEntity implements Parcelable { super.writeToParcel(dest, flags); dest.writeString(this.downloadUrl); dest.writeString(this.downloadPath); - dest.writeByte(this.isDownloadComplete ? (byte) 1 : (byte) 0); dest.writeByte(this.isRedirect ? (byte) 1 : (byte) 0); dest.writeString(this.redirectUrl); dest.writeString(this.groupName); @@ -186,7 +174,6 @@ public class DownloadEntity extends AbsNormalEntity implements Parcelable { super(in); this.downloadUrl = in.readString(); this.downloadPath = in.readString(); - this.isDownloadComplete = in.readByte() != 0; this.isRedirect = in.readByte() != 0; this.redirectUrl = in.readString(); this.groupName = in.readString(); diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java index 52ea22a5..7f6f342e 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java @@ -16,7 +16,6 @@ package com.arialyy.aria.core.download; import android.text.TextUtils; -import android.util.Log; import com.arialyy.aria.core.inf.AbsGroupTarget; import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.util.CommonUtil; @@ -171,6 +170,4 @@ public class DownloadGroupTarget } return list; } - - } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTask.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTask.java index 2c87c210..591bdf79 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTask.java @@ -17,7 +17,6 @@ package com.arialyy.aria.core.download; import android.content.Context; import android.os.Handler; -import android.util.Log; import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.download.downloader.DownloadGroupUtil; import com.arialyy.aria.core.download.downloader.DownloadListener; @@ -57,10 +56,20 @@ public class DownloadGroupTask extends AbsGroupTask { * 取消下载 */ @Override public void cancel() { - if (!mEntity.isDownloadComplete()) { + if (!mEntity.isComplete()) { if (!mUtil.isDownloading()) { if (mOutHandler != null) { mOutHandler.obtainMessage(ISchedulers.CANCEL, this).sendToTarget(); @@ -301,7 +301,7 @@ public class DownloadTask extends AbsNormalTask { private void saveData(int state, long location) { entity.setState(state); - entity.setDownloadComplete(state == IEntity.STATE_COMPLETE); + entity.setComplete(state == IEntity.STATE_COMPLETE); entity.setCurrentProgress(location); entity.update(); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java index 13d1c6fd..f5b9dbc0 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java @@ -24,7 +24,17 @@ import com.arialyy.aria.orm.OneToOne; */ public class DownloadTaskEntity extends AbsTaskEntity { - @OneToOne(table = DownloadEntity.class, key = "downloadUrl") public DownloadEntity entity; + @OneToOne(table = DownloadEntity.class, key = "downloadPath") public DownloadEntity entity; + + /** + * 所属的任务组组名,如果不属于任务组,则为null + */ + public String groupName = ""; + + /** + * 该任务是否属于任务组 + */ + public boolean isGroupTask = false; public DownloadTaskEntity() { } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java index 45cb39aa..af3c693a 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java @@ -24,6 +24,7 @@ import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.util.CommonUtil; import java.io.File; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.Timer; @@ -82,6 +83,10 @@ public class DownloadGroupUtil implements IDownloadUtil { private int mCompleteNum = 0; //失败的任务数 private int mFailNum = 0; + /** + * 该任务组对应的所有任务 + */ + private Map mTasksMap = new HashMap<>(); public DownloadGroupUtil(IDownloadListener listener, DownloadGroupTaskEntity taskEntity) { mListener = listener; @@ -89,13 +94,20 @@ public class DownloadGroupUtil implements IDownloadUtil { mInfoPool = Executors.newCachedThreadPool(); mExePool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); mTaskNum = mTaskEntity.entity.getSubTask().size(); + List tasks = + DbEntity.findDatas(DownloadTaskEntity.class, "groupName=?", mTaskEntity.key); + if (tasks != null && !tasks.isEmpty()) { + for (DownloadTaskEntity te : tasks) { + mTasksMap.put(te.getEntity().getDownloadUrl(), te); + } + } for (DownloadEntity entity : mTaskEntity.entity.getSubTask()) { File file = new File(entity.getDownloadPath()); - if (entity.isDownloadComplete() && file.exists()) { + if (entity.isComplete() && file.exists()) { mTotalSize += entity.getFileSize(); mCompleteNum++; } else { - mExeMap.put(entity.getDownloadUrl(), createDownloadTask(entity)); + mExeMap.put(entity.getDownloadUrl(), createChildDownloadTask(entity)); } mCurrentLocation += entity.getCurrentProgress(); } @@ -115,8 +127,8 @@ public class DownloadGroupUtil implements IDownloadUtil { @Override public void cancelDownload() { isRunning = false; - mListener.onCancel(); closeTimer(); + mListener.onCancel(); if (!mInfoPool.isShutdown()) { mInfoPool.shutdown(); } @@ -131,12 +143,26 @@ public class DownloadGroupUtil implements IDownloadUtil { dt.cancelDownload(); } } + delDownloadInfo(); + mTaskEntity.deleteData(); + } + + /** + * 删除所有子任务的下载信息 + */ + private void delDownloadInfo() { + List tasks = + DbEntity.findDatas(DownloadTaskEntity.class, "groupName=?", mTaskEntity.key); + if (tasks == null || tasks.isEmpty()) return; + for (DownloadTaskEntity taskEntity : tasks) { + CommonUtil.delDownloadTaskConfig(taskEntity.removeFile, taskEntity); + } } @Override public void stopDownload() { isRunning = false; - mListener.onStop(mCurrentLocation); closeTimer(); + mListener.onStop(mCurrentLocation); if (!mInfoPool.isShutdown()) { mInfoPool.shutdown(); } @@ -227,9 +253,9 @@ public class DownloadGroupUtil implements IDownloadUtil { * 开始进度流程 */ private void startRunningFlow() { + closeTimer(); mListener.onPostPre(mTotalSize); mListener.onStart(mCurrentLocation); - closeTimer(); mTimer = new Timer(true); mTimer.schedule(new TimerTask() { @Override public void run() { @@ -247,15 +273,15 @@ public class DownloadGroupUtil implements IDownloadUtil { ChildDownloadListener listener = new ChildDownloadListener(taskEntity); Downloader dt = new Downloader(listener, taskEntity); mDownloaderMap.put(taskEntity.getEntity().getDownloadUrl(), dt); + if (mExePool.isShutdown()) return; mExePool.execute(dt); } /** * 创建子任务下载信息 */ - private DownloadTaskEntity createDownloadTask(DownloadEntity entity) { - DownloadTaskEntity taskEntity = - DbEntity.findFirst(DownloadTaskEntity.class, "key=?", entity.getDownloadUrl()); + private DownloadTaskEntity createChildDownloadTask(DownloadEntity entity) { + DownloadTaskEntity taskEntity = mTasksMap.get(entity.getDownloadUrl()); if (taskEntity != null) { return taskEntity; } @@ -265,6 +291,10 @@ public class DownloadGroupUtil implements IDownloadUtil { taskEntity.requestEnum = mTaskEntity.requestEnum; taskEntity.redirectUrlKey = mTaskEntity.redirectUrlKey; taskEntity.removeFile = mTaskEntity.removeFile; + taskEntity.groupName = mTaskEntity.key; + taskEntity.isGroupTask = true; + taskEntity.key = entity.getDownloadPath(); + taskEntity.save(); return taskEntity; } @@ -275,6 +305,7 @@ public class DownloadGroupUtil implements IDownloadUtil { DownloadTaskEntity taskEntity; DownloadEntity entity; + long lastLen = 0; ChildDownloadListener(DownloadTaskEntity entity) { @@ -294,6 +325,7 @@ public class DownloadGroupUtil implements IDownloadUtil { @Override public void onResume(long resumeLocation) { saveData(IEntity.STATE_POST_PRE, IEntity.STATE_RUNNING); + lastLen = resumeLocation; } @Override public void onStart(long startLocation) { @@ -335,13 +367,13 @@ public class DownloadGroupUtil implements IDownloadUtil { private void reTry() { if (entity.getFailNum() < 5) { Downloader dt = mDownloaderMap.get(entity.getDownloadUrl()); - mExePool.execute(dt); + dt.startDownload(); } } private void saveData(int state, long location) { entity.setState(state); - entity.setDownloadComplete(state == IEntity.STATE_COMPLETE); + entity.setComplete(state == IEntity.STATE_COMPLETE); entity.setCurrentProgress(location); entity.update(); } 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 8ff32489..173f691b 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 @@ -84,6 +84,7 @@ class Downloader implements Runnable, IDownloadUtil { */ private void startFlow() { checkTask(); + mListener.onPostPre(mEntity.getFileSize()); mConstance.cleanState(); mConstance.isDownloading = true; try { diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/SimpleDownloadUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/SimpleDownloadUtil.java index 6759a047..ac15d85d 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/SimpleDownloadUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/SimpleDownloadUtil.java @@ -90,7 +90,6 @@ public class SimpleDownloadUtil implements IDownloadUtil, Runnable { if (TextUtils.isEmpty(mTaskEntity.redirectUrl)) { new Thread(new FileInfoThread(mTaskEntity, new FileInfoThread.OnFileInfoCallback() { @Override public void onComplete(String url, int code) { - mListener.onPostPre(mTaskEntity.getEntity().getFileSize()); mDT.startDownload(); } @@ -99,7 +98,6 @@ public class SimpleDownloadUtil implements IDownloadUtil, Runnable { } })).start(); } else { - mListener.onPostPre(mTaskEntity.getEntity().getFileSize()); new Downloader(mListener, mTaskEntity).startDownload(); } } 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 7cab6a94..91ad7090 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 @@ -60,6 +60,16 @@ public abstract class AbsEntity extends DbEntity implements IEntity, Parcelable */ private long completeTime; + private boolean isComplete = false; + + public boolean isComplete() { + return isComplete; + } + + public void setComplete(boolean complete) { + isComplete = complete; + } + public String getConvertFileSize() { return convertFileSize; } @@ -149,6 +159,7 @@ 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); } protected AbsEntity(Parcel in) { @@ -161,5 +172,7 @@ 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; } + } diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsGroupTarget.java b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsGroupTarget.java index 19bad7c7..c201a010 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsGroupTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsGroupTarget.java @@ -22,13 +22,5 @@ package com.arialyy.aria.core.inf; public abstract class AbsGroupTarget extends AbsTarget { - /** - * 设置任务组的组名,如果不设置任务组,Aria会自动将任务组的所有子任务的key相加,取md5码作为任务组组名 - * - * @param groupName 任务组组名 - */ - public TARGET setGroupName(String groupName) { - mEntity.setGroupName(groupName); - return (TARGET) this; - } + } diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTaskEntity.java b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTaskEntity.java index 7829e670..ed651e99 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTaskEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTaskEntity.java @@ -68,7 +68,8 @@ public abstract class AbsTaskEntity extends DbEntity { public String redirectUrl = ""; /** - * 用于判断删除任务时是否需要删除文件{@code true}删除 + * {@code true} 删除任务数据库记录,并且删除已经下载完成的文件 + * {@code false} 如果任务已经完成,只删除任务数据库记录 */ @Ignore public boolean removeFile = false; diff --git a/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java b/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java index 7cf4d0ed..95bece50 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java +++ b/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java @@ -118,7 +118,7 @@ public class DownloadTaskQueue if (!TextUtils.isEmpty(target)) { task = (DownloadTask) TaskFactory.getInstance() .createTask(target, entity, DownloadSchedulers.getInstance()); - entity.key = entity.getEntity().getDownloadUrl(); + entity.key = entity.getEntity().getDownloadPath(); mCachePool.putTask(task); } else { Log.e(TAG, "target name 为 null!!"); diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java index 39cc014f..992cf254 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java @@ -28,15 +28,7 @@ import com.arialyy.aria.orm.Primary; public class UploadEntity extends AbsNormalEntity implements Parcelable { @Primary private String filePath; //文件路径 - private boolean isComplete = false; - public boolean isComplete() { - return isComplete; - } - - public void setComplete(boolean complete) { - isComplete = complete; - } public String getFilePath() { return filePath; @@ -56,13 +48,11 @@ public class UploadEntity extends AbsNormalEntity implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeString(this.filePath); - dest.writeByte(this.isComplete ? (byte) 1 : (byte) 0); } protected UploadEntity(Parcel in) { super(in); this.filePath = in.readString(); - this.isComplete = in.readByte() != 0; } @Ignore public static final Creator CREATOR = new Creator() { 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 5335a519..e51097e4 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java @@ -133,16 +133,22 @@ public class CommonUtil { /** * 删除上传任务的配置,包括 * - * @param removeFile {@code true} 删除已经上传完成的任务,不仅删除上传记录,还会删除已经上传完成的文件,{@code false} - * 如果文件已经上传完成,只删除上传记录 + * @param removeFile {@code true} 不仅删除任务数据库记录,还会删除已经下载完成的文件 + * {@code false}如果任务已经完成,只删除任务数据库记录 */ public static void delUploadTaskConfig(boolean removeFile, UploadTaskEntity tEntity) { UploadEntity uEntity = tEntity.getEntity(); + File file = new File(uEntity.getFilePath()); if (removeFile) { - File file = new File(uEntity.getFilePath()); if (file.exists()) { file.delete(); } + } else { + if (!uEntity.isComplete()) { + if (file.exists()) { + file.delete(); + } + } } File config = new File( AriaManager.APP.getFilesDir().getPath() + "/temp/" + uEntity.getFileName() + ".properties"); @@ -156,17 +162,24 @@ public class CommonUtil { /** * 删除下载任务的配置,包括 * - * @param removeFile{@code true} 删除已经下载完成的任务,不仅删除下载记录,还会删除已经下载完成的文件,{@code false} - * 如果文件已经下载完成,只删除下载记录 + * @param removeFile {@code true} 不仅删除任务数据库记录,还会删除已经下载完成的文件 + * {@code false}如果任务已经完成,只删除任务数据库记录 */ public static void delDownloadTaskConfig(boolean removeFile, DownloadTaskEntity tEntity) { DownloadEntity dEntity = tEntity.getEntity(); + File file = new File(dEntity.getDownloadPath()); if (removeFile) { - File file = new File(dEntity.getDownloadPath()); if (file.exists()) { file.delete(); } + } else { + if (!dEntity.isComplete()) { + if (file.exists()) { + file.delete(); + } + } } + File config = new File( AriaManager.APP.getFilesDir().getPath() + "/temp/" + dEntity.getFileName() + ".properties"); if (config.exists()) { diff --git a/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java b/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java index d0284ad7..3e556da1 100644 --- a/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java +++ b/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java @@ -18,8 +18,6 @@ package com.arialyy.simple.download; import android.os.Bundle; import android.os.Environment; -import android.os.Handler; -import android.os.Message; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -33,94 +31,30 @@ import com.arialyy.aria.core.download.DownloadTarget; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadTask; import com.arialyy.aria.core.inf.IEntity; -import com.arialyy.aria.util.CommonUtil; -import com.arialyy.frame.util.show.L; import com.arialyy.frame.util.show.T; import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; import com.arialyy.simple.databinding.ActivitySingleBinding; -import com.arialyy.simple.widget.HorizontalProgressBarWithNumber; public class SingleTaskActivity extends BaseActivity { - public static final int DOWNLOAD_PRE = 0x01; - public static final int DOWNLOAD_STOP = 0x02; - public static final int DOWNLOAD_FAILE = 0x03; - public static final int DOWNLOAD_CANCEL = 0x04; - public static final int DOWNLOAD_RESUME = 0x05; - public static final int DOWNLOAD_COMPLETE = 0x06; - public static final int DOWNLOAD_RUNNING = 0x07; - public static final int DOWNLOAD_START = 0x08; private static final String DOWNLOAD_URL = //"http://kotlinlang.org/docs/kotlin-docs.pdf"; //"https://atom-installer.github.com/v1.13.0/AtomSetup.exe?s=1484074138&ext=.exe"; - //"http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk"; - //"http://down2.xiaoshuofuwuqi.com/d/file/filetxt/20170608/14/%BA%DA%CE%D7%CA%A6%E1%C8%C6%F0.txt"; - //"http://tinghuaapp.oss-cn-shanghai.aliyuncs.com/20170612201739607815"; - //"http://static.gaoshouyou.com/d/36/69/2d3699acfa69e9632262442c46516ad8.apk"; - "https://d.pcs.baidu.com/file/bc7334aba5443c2596d905a0bcf9e734?fid=2852548966-250528-290956601240893&time=1499758796&rt=sh&sign=FDTAERVY-DCb740ccc5511e5e8fedcff06b081203-HO8uC%2FT83oxUXZdObsg3b54%2Bzv8%3D&expires=8h&chkv=1&chkbd=0&chkpc=et&dp-logid=4444968052010847094&dp-callid=0&r=463246632"; + "http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk"; + //"http://down2.xiaoshuofuwuqi.com/d/file/filetxt/20170608/14/%BA%DA%CE%D7%CA%A6%E1%C8%C6%F0.txt"; + //"http://tinghuaapp.oss-cn-shanghai.aliyuncs.com/20170612201739607815"; + //"http://static.gaoshouyou.com/d/36/69/2d3699acfa69e9632262442c46516ad8.apk"; //"http://oqcpqqvuf.bkt.clouddn.com/ceshi.txt"; //"http://down8.androidgame-store.com/201706122321/97967927DD4E53D9905ECAA7874C8128/new/game1/19/45319/com.neuralprisma-2.5.2.174-2000174_1494784835.apk?f=web_1"; //不支持断点的链接 //"http://ox.konsung.net:5555/ksdc-web/download/downloadFile/?fileName=ksdc_1.0.2.apk&rRange=0-"; //"http://172.18.104.50:8080/download/_302turn"; - @Bind(R.id.progressBar) HorizontalProgressBarWithNumber mPb; @Bind(R.id.start) Button mStart; @Bind(R.id.stop) Button mStop; @Bind(R.id.cancel) Button mCancel; @Bind(R.id.speeds) RadioGroup mRg; - private Handler mUpdateHandler = new Handler() { - @Override public void handleMessage(Message msg) { - super.handleMessage(msg); - switch (msg.what) { - case DOWNLOAD_RUNNING: - DownloadTask task = (DownloadTask) msg.obj; - long current = task.getCurrentProgress(); - long len = task.getFileSize(); - if (len == 0) { - mPb.setProgress(0); - } else { - mPb.setProgress((int) ((current * 100) / len)); - } - getBinding().setSpeed(task.getConvertSpeed()); - break; - case DOWNLOAD_PRE: - setBtState(false); - break; - case DOWNLOAD_START: - getBinding().setFileSize(CommonUtil.formatFileSize((Long) msg.obj)); - break; - case DOWNLOAD_FAILE: - Toast.makeText(SingleTaskActivity.this, "下载失败", Toast.LENGTH_SHORT).show(); - setBtState(true); - break; - case DOWNLOAD_STOP: - Toast.makeText(SingleTaskActivity.this, "暂停下载", Toast.LENGTH_SHORT).show(); - mStart.setText("恢复"); - setBtState(true); - break; - case DOWNLOAD_CANCEL: - mPb.setProgress(0); - Toast.makeText(SingleTaskActivity.this, "取消下载", Toast.LENGTH_SHORT).show(); - mStart.setText("开始"); - setBtState(true); - break; - case DOWNLOAD_RESUME: - mStart.setText("暂停"); - setBtState(false); - break; - case DOWNLOAD_COMPLETE: - mPb.setProgress(100); - Toast.makeText(SingleTaskActivity.this, "下载完成", Toast.LENGTH_SHORT).show(); - mStart.setText("重新开始?"); - mCancel.setEnabled(false); - setBtState(true); - break; - } - } - }; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Aria.download(this).register(); @@ -175,40 +109,54 @@ public class SingleTaskActivity extends BaseActivity { } @Download.onPre(DOWNLOAD_URL) protected void onPre(DownloadTask task) { - mUpdateHandler.obtainMessage(DOWNLOAD_PRE, task.getDownloadEntity().getFileSize()) - .sendToTarget(); + setBtState(false); } @Download.onTaskStart(DOWNLOAD_URL) void taskStart(DownloadTask task) { - mUpdateHandler.obtainMessage(DOWNLOAD_START, task.getDownloadEntity().getFileSize()) - .sendToTarget(); + getBinding().setFileSize(task.getConvertFileSize()); } @Download.onTaskRunning(DOWNLOAD_URL) protected void running(DownloadTask task) { - mUpdateHandler.obtainMessage(DOWNLOAD_RUNNING, task).sendToTarget(); + long len = task.getFileSize(); + if (len == 0) { + getBinding().setProgress(0); + } else { + getBinding().setProgress(task.getPercent()); + } + getBinding().setSpeed(task.getConvertSpeed()); } @Download.onTaskResume(DOWNLOAD_URL) void taskResume(DownloadTask task) { - mUpdateHandler.obtainMessage(DOWNLOAD_START, task.getFileSize()).sendToTarget(); + mStart.setText("暂停"); + setBtState(false); } @Download.onTaskStop(DOWNLOAD_URL) void taskStop(DownloadTask task) { - mUpdateHandler.sendEmptyMessage(DOWNLOAD_STOP); - L.d(TAG, "task__stop"); + mStart.setText("恢复"); + setBtState(true); + getBinding().setSpeed(""); } @Download.onTaskCancel(DOWNLOAD_URL) void taskCancel(DownloadTask task) { - mUpdateHandler.sendEmptyMessage(DOWNLOAD_CANCEL); - L.d(TAG, "task__cancel"); + getBinding().setProgress(0); + Toast.makeText(SingleTaskActivity.this, "取消下载", Toast.LENGTH_SHORT).show(); + mStart.setText("开始"); + setBtState(true); + getBinding().setSpeed(""); } @Download.onTaskFail(DOWNLOAD_URL) void taskFail(DownloadTask task) { - L.d(TAG, "task__fail"); - mUpdateHandler.sendEmptyMessage(DOWNLOAD_FAILE); + Toast.makeText(SingleTaskActivity.this, "下载失败", Toast.LENGTH_SHORT).show(); + setBtState(true); } @Download.onTaskComplete(DOWNLOAD_URL) void taskComplete(DownloadTask task) { - mUpdateHandler.sendEmptyMessage(DOWNLOAD_COMPLETE); + getBinding().setProgress(100); + Toast.makeText(SingleTaskActivity.this, "下载完成", Toast.LENGTH_SHORT).show(); + mStart.setText("重新开始?"); + mCancel.setEnabled(false); + setBtState(true); + getBinding().setSpeed(""); } @Download.onNoSupportBreakPoint(DOWNLOAD_URL) @@ -224,7 +172,7 @@ public class SingleTaskActivity extends BaseActivity { super.init(savedInstanceState); setTitle("单任务下载"); DownloadTarget target = Aria.download(this).load(DOWNLOAD_URL); - mPb.setProgress(target.getPercent()); + getBinding().setProgress(target.getPercent()); if (target.getTaskState() == IEntity.STATE_STOP) { mStart.setText("恢复"); mStart.setTextColor(getResources().getColor(android.R.color.holo_blue_light)); @@ -248,11 +196,6 @@ public class SingleTaskActivity extends BaseActivity { } else if (text.equals("恢复")) { Aria.download(this).load(DOWNLOAD_URL).resume(); } - //DownloadTarget target = Aria.download(this) - // .load(DOWNLOAD_URL) - // .setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/test.apk"); - //target.add(); - //target.cancel(); break; case R.id.stop: Aria.download(this).load(DOWNLOAD_URL).pause(); 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 0a486f12..22c73f3a 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 @@ -49,11 +49,11 @@ public class DownloadGroupActivity extends BaseActivity getUrls() { List urls = new ArrayList<>(); - String[] str = getContext().getResources().getStringArray(R.array.download_url); + //String[] str = getContext().getResources().getStringArray(R.array.download_url); + String[] str = getContext().getResources().getStringArray(R.array.group_urls); Collections.addAll(urls, str); return urls; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d7fe4f24..ecb70eb6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,6 +22,7 @@ 幻影纹章 史上最坑爹的游戏10 鲜果消消乐 + 航海奇迹 @@ -30,6 +31,7 @@ http://rs.0.gaoshouyou.com/d/51/46/58514d126c46b8a3f27fc8c7db3b09ec.apk http://rs.0.gaoshouyou.com/d/23/69/07238f952669727878d7a0e180534c8b.apk http://rs.0.gaoshouyou.com/d/e7/3d/73e716d3353de5b479fcf7da8d36a5ef.apk + http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk