pull/330/head
laoyuyu 7 years ago
parent cb1f0e730b
commit cb6f08aa0d
  1. 83
      Aria/src/main/java/com/arialyy/aria/core/command/normal/ResumeAllCmd.java
  2. 7
      Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java
  3. 21
      Aria/src/main/java/com/arialyy/aria/core/common/ProxyHelper.java
  4. 25
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java
  5. 3
      Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java
  6. 6
      Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java
  7. 3
      Aria/src/main/java/com/arialyy/aria/core/inf/AbsEntity.java
  8. 2
      Aria/src/main/java/com/arialyy/aria/core/scheduler/AbsSchedulers.java
  9. 7
      Aria/src/main/java/com/arialyy/aria/core/upload/UploadReceiver.java
  10. 27
      Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java
  11. 4
      app/src/main/AndroidManifest.xml
  12. 2
      app/src/main/java/com/arialyy/simple/download/group/GroupModule.java
  13. 2
      app/src/main/java/com/arialyy/simple/download/multi_download/MultiTaskActivity.java
  14. 5
      app/src/main/res/values/strings.xml
  15. 2
      build.gradle

@ -1,18 +1,19 @@
package com.arialyy.aria.core.command.normal; package com.arialyy.aria.core.command.normal;
import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.AriaManager;
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.DownloadGroupTaskEntity;
import com.arialyy.aria.core.download.DownloadTaskEntity; import com.arialyy.aria.core.download.DownloadTaskEntity;
import com.arialyy.aria.core.download.wrapper.DGTEWrapper;
import com.arialyy.aria.core.download.wrapper.DTEWrapper;
import com.arialyy.aria.core.inf.AbsTask; import com.arialyy.aria.core.inf.AbsTask;
import com.arialyy.aria.core.inf.AbsTaskEntity; import com.arialyy.aria.core.inf.AbsTaskEntity;
import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.inf.IEntity;
import com.arialyy.aria.core.manager.TEManager;
import com.arialyy.aria.core.queue.DownloadGroupTaskQueue; import com.arialyy.aria.core.queue.DownloadGroupTaskQueue;
import com.arialyy.aria.core.queue.DownloadTaskQueue; import com.arialyy.aria.core.queue.DownloadTaskQueue;
import com.arialyy.aria.core.queue.UploadTaskQueue; import com.arialyy.aria.core.queue.UploadTaskQueue;
import com.arialyy.aria.core.upload.UploadEntity;
import com.arialyy.aria.core.upload.UploadTaskEntity; import com.arialyy.aria.core.upload.UploadTaskEntity;
import com.arialyy.aria.core.upload.wrapper.UTEWrapper;
import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.orm.DbEntity;
import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.CommonUtil; import com.arialyy.aria.util.CommonUtil;
@ -43,10 +44,10 @@ final class ResumeAllCmd<T extends AbsTaskEntity> extends AbsNormalCmd<T> {
return; return;
} }
if (isDownloadCmd) { if (isDownloadCmd) {
resumeTask(findTaskData(1)); findTaskData(1);
resumeTask(findTaskData(2)); findTaskData(2);
} else { } else {
resumeTask(findTaskData(3)); findTaskData(3);
} }
resumeWaitTask(); resumeWaitTask();
} }
@ -56,53 +57,49 @@ final class ResumeAllCmd<T extends AbsTaskEntity> extends AbsNormalCmd<T> {
* *
* @param type {@code 1}单任务下载任务{@code 2}任务组下载任务{@code 3} 单任务上传任务 * @param type {@code 1}单任务下载任务{@code 2}任务组下载任务{@code 3} 单任务上传任务
*/ */
private List<AbsTaskEntity> findTaskData(int type) { private void findTaskData(int type) {
List<AbsTaskEntity> tempList = new ArrayList<>();
if (type == 1) { if (type == 1) {
List<DTEWrapper> wrappers = DbEntity.findRelationData(DTEWrapper.class, List<DownloadEntity> entities =
"DownloadTaskEntity.isGroupTask=? and DownloadTaskEntity.state!=?", "false", "1"); DbEntity.findDatas(DownloadEntity.class,
if (wrappers != null && !wrappers.isEmpty()) { "isGroupChild=? and state!=?", "false", "1");
for (DTEWrapper w : wrappers) { if (entities != null && !entities.isEmpty()) {
tempList.add(w.taskEntity); for (DownloadEntity entity : entities) {
resumeTask(TEManager.getInstance().getTEntity(DownloadTaskEntity.class, entity.getKey()));
} }
} }
} else if (type == 2) { } else if (type == 2) {
List<DGTEWrapper> wrappers = List<DownloadGroupEntity> entities =
DbEntity.findRelationData(DGTEWrapper.class, "DownloadGroupTaskEntity.state!=?", "1"); DbEntity.findDatas(DownloadGroupEntity.class, "state!=?", "1");
if (wrappers != null && !wrappers.isEmpty()) { if (entities != null && !entities.isEmpty()) {
for (DGTEWrapper w : wrappers) { for (DownloadGroupEntity entity : entities) {
tempList.add(w.taskEntity); resumeTask(
TEManager.getInstance().getGTEntity(DownloadGroupTaskEntity.class, entity.getUrls()));
} }
} }
} else if (type == 3) { } else if (type == 3) {
List<UTEWrapper> wrappers = List<UploadEntity> entities =
DbEntity.findRelationData(UTEWrapper.class, "UploadTaskEntity.state!=?", "1"); DbEntity.findDatas(UploadEntity.class, "state!=?", "1");
if (wrappers != null && !wrappers.isEmpty()) { if (entities != null && !entities.isEmpty()) {
for (UTEWrapper w : wrappers) { for (UploadEntity entity : entities) {
tempList.add(w.taskEntity); resumeTask(TEManager.getInstance().getTEntity(UploadTaskEntity.class, entity.getKey()));
} }
} }
} }
return tempList;
} }
/** /**
* 恢复任务 * 恢复任务
*/ */
private void resumeTask(List<AbsTaskEntity> taskList) { private void resumeTask(AbsTaskEntity te) {
if (taskList != null && !taskList.isEmpty()) { if (te == null || te.getEntity() == null) return;
for (AbsTaskEntity te : taskList) { int state = te.getState();
if (te == null || te.getEntity() == null) continue; if (state == IEntity.STATE_STOP || state == IEntity.STATE_OTHER) {
int state = te.getState(); resumeEntity(te);
if (state == IEntity.STATE_STOP || state == IEntity.STATE_OTHER) { } else if (state == IEntity.STATE_WAIT) {
resumeEntity(te); mWaitList.add(te);
} else if (state == IEntity.STATE_WAIT) { } else if (state == IEntity.STATE_RUNNING) {
mWaitList.add(te); if (!mQueue.taskIsRunning(te.getEntity().getKey())) {
} else if (state == IEntity.STATE_RUNNING) { resumeEntity(te);
if (!mQueue.taskIsRunning(te.getEntity().getKey())) {
resumeEntity(te);
}
}
} }
} }
} }
@ -117,6 +114,13 @@ final class ResumeAllCmd<T extends AbsTaskEntity> extends AbsNormalCmd<T> {
if (mQueue.getCurrentExePoolNum() < maxTaskNum) { if (mQueue.getCurrentExePoolNum() < maxTaskNum) {
startTask(createTask(te)); startTask(createTask(te));
} else { } else {
if (te instanceof DownloadTaskEntity) {
mQueue = DownloadTaskQueue.getInstance();
} else if (te instanceof UploadTaskEntity) {
mQueue = UploadTaskQueue.getInstance();
} else if (te instanceof DownloadGroupTaskEntity) {
mQueue = DownloadGroupTaskQueue.getInstance();
}
createTask(te); createTask(te);
} }
} }
@ -129,7 +133,8 @@ final class ResumeAllCmd<T extends AbsTaskEntity> extends AbsNormalCmd<T> {
*/ */
private void resumeEntity(AbsTaskEntity te) { private void resumeEntity(AbsTaskEntity te) {
if (te instanceof DownloadTaskEntity) { if (te instanceof DownloadTaskEntity) {
if (te.getRequestType() == AbsTaskEntity.D_FTP || te.getRequestType() == AbsTaskEntity.U_FTP) { if (te.getRequestType() == AbsTaskEntity.D_FTP
|| te.getRequestType() == AbsTaskEntity.U_FTP) {
te.setUrlEntity(CommonUtil.getFtpUrlInfo(te.getEntity().getKey())); te.setUrlEntity(CommonUtil.getFtpUrlInfo(te.getEntity().getKey()));
} }
mQueue = DownloadTaskQueue.getInstance(); mQueue = DownloadTaskQueue.getInstance();

@ -511,7 +511,12 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
mConstance.isRunning = true; mConstance.isRunning = true;
ALog.d(TAG, String.format("任务【%s】开始重试,线程__%s__【开始位置:%s,结束位置:%s】", mEntity.getFileName(), ALog.d(TAG, String.format("任务【%s】开始重试,线程__%s__【开始位置:%s,结束位置:%s】", mEntity.getFileName(),
key, task.getConfig().START_LOCATION, task.getConfig().END_LOCATION)); key, task.getConfig().START_LOCATION, task.getConfig().END_LOCATION));
mFixedThreadPool.execute(task); if (!mFixedThreadPool.isShutdown()) {
mFixedThreadPool.execute(task);
} else {
ALog.w(TAG, "线程池已关闭");
mListener.onFail(true);
}
} }
} }
} }

@ -16,7 +16,6 @@
package com.arialyy.aria.core.common; package com.arialyy.aria.core.common;
import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.AriaManager;
import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.CommonUtil; import com.arialyy.aria.util.CommonUtil;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -29,7 +28,8 @@ import java.util.Set;
* 代理参数获取 * 代理参数获取
*/ */
public class ProxyHelper { public class ProxyHelper {
public Set<String> downloadCounter, uploadCounter, downloadGroupCounter, downloadGroupSubCounter; public Set<String> downloadCounter = new HashSet<>(), uploadCounter = new HashSet<>(),
downloadGroupCounter = new HashSet<>(), downloadGroupSubCounter = new HashSet<>();
public static volatile ProxyHelper INSTANCE = null; public static volatile ProxyHelper INSTANCE = null;
@ -47,9 +47,10 @@ public class ProxyHelper {
} }
private void init() { private void init() {
List<String> classes = CommonUtil.getClassName(AriaManager.APP, "com.arialyy.aria"); List<String> classes = CommonUtil.getClassName(AriaManager.APP,
"com.arialyy.aria.ProxyClassCounter");
for (String className : classes) { for (String className : classes) {
if (!className.startsWith("com.arialyy.aria.ProxyClassCounter")){ if (!className.startsWith("com.arialyy.aria.ProxyClassCounter")) {
continue; continue;
} }
count(className); count(className);
@ -66,30 +67,18 @@ public class ProxyHelper {
Object object = clazz.newInstance(); Object object = clazz.newInstance();
Object dc = download.invoke(object); Object dc = download.invoke(object);
if (dc != null) { if (dc != null) {
if (downloadCounter == null) {
downloadCounter = new HashSet<>();
}
downloadCounter.addAll((Set<String>) dc); downloadCounter.addAll((Set<String>) dc);
} }
Object dgc = downloadGroup.invoke(object); Object dgc = downloadGroup.invoke(object);
if (dgc != null) { if (dgc != null) {
if (downloadGroupCounter == null) {
downloadGroupCounter = new HashSet<>();
}
downloadGroupCounter.addAll((Set<String>) dgc); downloadGroupCounter.addAll((Set<String>) dgc);
} }
Object dgsc = downloadGroupSub.invoke(object); Object dgsc = downloadGroupSub.invoke(object);
if (dgsc != null) { if (dgsc != null) {
if (downloadGroupSubCounter == null) {
downloadGroupSubCounter = new HashSet<>();
}
downloadGroupSubCounter.addAll((Set<String>) dgsc); downloadGroupSubCounter.addAll((Set<String>) dgsc);
} }
Object uc = upload.invoke(object); Object uc = upload.invoke(object);
if (uc != null) { if (uc != null) {
if (uploadCounter == null) {
uploadCounter = new HashSet<>();
}
uploadCounter.addAll((Set<String>) uc); uploadCounter.addAll((Set<String>) uc);
} }
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {

@ -294,6 +294,9 @@ public class DownloadReceiver extends AbsReceiver {
if (!CheckUtil.checkUrl(downloadUrl)) { if (!CheckUtil.checkUrl(downloadUrl)) {
return null; return null;
} }
if (!taskExists(downloadUrl)) {
return null;
}
return TEManager.getInstance().getTEntity(DownloadTaskEntity.class, downloadUrl); return TEManager.getInstance().getTEntity(DownloadTaskEntity.class, downloadUrl);
} }
@ -308,6 +311,9 @@ public class DownloadReceiver extends AbsReceiver {
ALog.e(TAG, "获取任务组实体失败:任务组子任务下载地址列表为null"); ALog.e(TAG, "获取任务组实体失败:任务组子任务下载地址列表为null");
return null; return null;
} }
if (!taskExists(urls)) {
return null;
}
return TEManager.getInstance().getGTEntity(DownloadGroupTaskEntity.class, urls); return TEManager.getInstance().getGTEntity(DownloadGroupTaskEntity.class, urls);
} }
@ -322,6 +328,11 @@ public class DownloadReceiver extends AbsReceiver {
ALog.e(TAG, "获取FTP文件夹实体失败:下载路径为null"); ALog.e(TAG, "获取FTP文件夹实体失败:下载路径为null");
return null; return null;
} }
boolean b =
DownloadGroupEntity.findFirst(DownloadGroupEntity.class, "groupName=?", dirUrl) != null;
if (!b) {
return null;
}
return TEManager.getInstance().getFDTEntity(DownloadGroupTaskEntity.class, dirUrl); return TEManager.getInstance().getFDTEntity(DownloadGroupTaskEntity.class, dirUrl);
} }
@ -332,6 +343,20 @@ public class DownloadReceiver extends AbsReceiver {
return DownloadEntity.findFirst(DownloadEntity.class, "url=?", downloadUrl) != null; return DownloadEntity.findFirst(DownloadEntity.class, "url=?", downloadUrl) != null;
} }
/**
* 判断任务组是否存在
*
* @return {@code true} 存在{@code false} 不存在
*/
public boolean taskExists(List<String> urls) {
if (urls == null || urls.isEmpty()) {
return false;
}
String groupName = CommonUtil.getMd5Code(urls);
return DownloadGroupEntity.findFirst(DownloadGroupEntity.class, "groupName=?", groupName)
!= null;
}
/** /**
* 获取所有普通下载任务 * 获取所有普通下载任务
* 获取未完成的普通任务列表{@link #getAllNotCompletTask()} * 获取未完成的普通任务列表{@link #getAllNotCompletTask()}

@ -259,6 +259,9 @@ public abstract class AbsGroupUtil implements IUtil {
dt.stop(); dt.stop();
} }
} }
if (mDownloaderMap.size() == 0){
mListener.onStop(mCurrentLocation);
}
} }
protected void onStop() { protected void onStop() {

@ -44,6 +44,7 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil {
private int mInitFailNum; private int mInitFailNum;
private boolean isStop = false; private boolean isStop = false;
private boolean isStart = false; private boolean isStart = false;
private int mExeNum;
/** /**
* 文件信息回调组 * 文件信息回调组
@ -89,6 +90,7 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil {
return; return;
} }
Set<String> keys = mExeMap.keySet(); Set<String> keys = mExeMap.keySet();
mExeNum = mExeMap.size();
for (String key : keys) { for (String key : keys) {
DownloadTaskEntity taskEntity = mExeMap.get(key); DownloadTaskEntity taskEntity = mExeMap.get(key);
if (taskEntity != null) { if (taskEntity != null) {
@ -161,11 +163,11 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil {
*/ */
private void checkStartFlow() { private void checkStartFlow() {
synchronized (DownloadGroupUtil.class) { synchronized (DownloadGroupUtil.class) {
if (mInitFailNum == mExeMap.size()) { if (mInitFailNum == mExeNum) {
closeTimer(false); closeTimer(false);
mListener.onFail(true); mListener.onFail(true);
} }
if (!isStart && mInitCompleteNum + mInitFailNum == mExeMap.size() || !isNeedLoadFileSize) { if (!isStart && mInitCompleteNum + mInitFailNum == mExeNum || !isNeedLoadFileSize) {
startRunningFlow(); startRunningFlow();
updateFileSize(); updateFileSize();
isStart = true; isStart = true;

@ -50,6 +50,9 @@ public abstract class AbsEntity extends DbEntity implements IEntity, Parcelable
*/ */
private String convertFileSize; private String convertFileSize;
/**
* 任务状态{@link IEntity}
*/
private int state = STATE_WAIT; private int state = STATE_WAIT;
/** /**
* 当前下载进度 * 当前下载进度

@ -158,7 +158,7 @@ abstract class AbsSchedulers<TASK_ENTITY extends AbsTaskEntity, TASK extends Abs
} }
/** /**
* 处理普通任务事件 * 处理普通任务和任务组的事件
*/ */
private void handleNormalEvent(TASK task, int what) { private void handleNormalEvent(TASK task, int what) {
switch (what) { switch (what) {

@ -17,11 +17,11 @@ package com.arialyy.aria.core.upload;
import android.support.annotation.CheckResult; import android.support.annotation.CheckResult;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.text.TextUtils;
import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.AriaManager;
import com.arialyy.aria.core.command.ICmd; import com.arialyy.aria.core.command.ICmd;
import com.arialyy.aria.core.command.normal.NormalCmdFactory; import com.arialyy.aria.core.command.normal.NormalCmdFactory;
import com.arialyy.aria.core.common.ProxyHelper; import com.arialyy.aria.core.common.ProxyHelper;
import com.arialyy.aria.core.download.DownloadEntity;
import com.arialyy.aria.core.inf.AbsReceiver; import com.arialyy.aria.core.inf.AbsReceiver;
import com.arialyy.aria.core.scheduler.UploadSchedulers; import com.arialyy.aria.core.scheduler.UploadSchedulers;
import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.orm.DbEntity;
@ -61,8 +61,12 @@ public class UploadReceiver extends AbsReceiver<UploadEntity> {
/** /**
* 通过上传路径获取上传实体 * 通过上传路径获取上传实体
* 如果任务不存在方便null
*/ */
public UploadEntity getUploadEntity(String filePath) { public UploadEntity getUploadEntity(String filePath) {
if (TextUtils.isEmpty(filePath)) {
return null;
}
return DbEntity.findFirst(UploadEntity.class, "filePath=?", filePath); return DbEntity.findFirst(UploadEntity.class, "filePath=?", filePath);
} }
@ -98,7 +102,6 @@ public class UploadReceiver extends AbsReceiver<UploadEntity> {
"isGroupChild=? and isComplete=?", "false", "true"); "isGroupChild=? and isComplete=?", "false", "true");
} }
@Override public void stopAllTask() { @Override public void stopAllTask() {
AriaManager.getInstance(AriaManager.APP) AriaManager.getInstance(AriaManager.APP)
.setCmd(NormalCmdFactory.getInstance() .setCmd(NormalCmdFactory.getInstance()

@ -40,6 +40,7 @@ import com.arialyy.aria.core.inf.AbsTaskEntity;
import com.arialyy.aria.core.upload.UploadEntity; import com.arialyy.aria.core.upload.UploadEntity;
import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.orm.DbEntity;
import dalvik.system.DexFile; import dalvik.system.DexFile;
import dalvik.system.PathClassLoader;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;
import java.io.FileInputStream; import java.io.FileInputStream;
@ -74,26 +75,36 @@ public class CommonUtil {
/** /**
* 获取某包下所有类 * 获取某包下所有类
* *
* @param packageName * @param className 过滤的类
* @return 类的完整名称 * @return 类的完整名称
*/ */
public static List<String> getClassName(Context context, String packageName) { public static List<String> getClassName(Context context, String className) {
List<String> classNameList = new ArrayList<>(); List<String> classNameList = new ArrayList<>();
try { try {
String pPath = context.getPackageCodePath(); String pPath = context.getPackageCodePath();
File dir = new File(pPath).getParentFile(); File dir = new File(pPath).getParentFile();
//PathClassLoader classLoader = (PathClassLoader) context.getClassLoader();
String dPath = dir.getPath(); String dPath = dir.getPath();
for (String path : dir.list()) { for (String path : dir.list()) {
String fPath = dPath + "/" + path; String fPath = dPath + "/" + path;
Log.d(TAG, fPath);
if (!fPath.endsWith(".apk")) { if (!fPath.endsWith(".apk")) {
continue; continue;
} }
DexFile df = new DexFile(fPath);//通过DexFile查找当前的APK中可执行文件 DexFile df = new DexFile(fPath);//通过DexFile查找当前的APK中可执行文件
Enumeration<String> enumeration = df.entries();//获取df中的元素 这里包含了所有可执行的类名 该类名包含了包名+类名的方式 Enumeration<String> enumeration = df.entries();//获取df中的元素 这里包含了所有可执行的类名 该类名包含了包名+类名的方式
while (enumeration.hasMoreElements()) {//遍历 while (enumeration.hasMoreElements()) {
String className = enumeration.nextElement(); String _className = enumeration.nextElement();
if (className.contains(packageName)) {//在当前所有可执行的类里面查找包含有该包名的所有类 if (!_className.contains(className)) {
classNameList.add(className); continue;
}
//Class clazz = classLoader.loadClass(_className); // 处理4.4手机无法获取到类的问题
//String cn = clazz.getName();
//if (clazz.getName().contains(className)) {//在当前所有可执行的类里面查找包含有该包名的所有类
// classNameList.add(_className);
//}
if (_className.contains(className)){
classNameList.add(_className);
} }
} }
df.close(); df.close();
@ -101,6 +112,9 @@ public class CommonUtil {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
//catch (ClassNotFoundException e) {
// e.printStackTrace();
//}
return classNameList; return classNameList;
} }
@ -395,7 +409,6 @@ public class CommonUtil {
if (subs != null) { if (subs != null) {
for (DownloadEntity sub : subs) { for (DownloadEntity sub : subs) {
File file = new File(sub.getDownloadPath()); File file = new File(sub.getDownloadPath());
Log.d(TAG, "exist == " + file.exists() + ", rf == " + removeFile + ", complete = " + sub.isComplete());
if (file.exists() && (removeFile || !sub.isComplete())) { if (file.exists() && (removeFile || !sub.isComplete())) {
file.delete(); file.delete();
} }

@ -16,10 +16,10 @@
<!--android:name=".test.TestActivity"--> <!--android:name=".test.TestActivity"-->
<!--android:name=".test.AnyRunActivity"--> <!--android:name=".test.AnyRunActivity"-->
<!--android:name=".test.TestGroupActivity"--> <!--android:name=".test.TestGroupActivity"-->
<!--android:name=".MainActivity"--> <!--android:name=".test.AnyRunActivity"-->
<!--android:name=".download.group.DownloadGroupActivity"--> <!--android:name=".download.group.DownloadGroupActivity"-->
<activity <activity
android:name=".test.AnyRunActivity" android:name=".MainActivity"
android:label="@string/app_name"> android:label="@string/app_name">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>

@ -32,7 +32,7 @@ public class GroupModule extends BaseModule {
public List<String> getUrls() { public List<String> getUrls() {
List<String> urls = new ArrayList<>(); List<String> urls = new ArrayList<>();
String[] str = getContext().getResources().getStringArray(R.array.group_urls_1); String[] str = getContext().getResources().getStringArray(R.array.group_url4);
Collections.addAll(urls, str); Collections.addAll(urls, str);
return urls; return urls;
} }

@ -121,6 +121,7 @@ public class MultiTaskActivity extends BaseActivity<ActivityMultiBinding> {
@DownloadGroup.onTaskStop void groupTaskStop(DownloadGroupTask task) { @DownloadGroup.onTaskStop void groupTaskStop(DownloadGroupTask task) {
mAdapter.updateBtState(task.getKey(), true); mAdapter.updateBtState(task.getKey(), true);
Log.d(TAG, String.format("group【%s】stop", task.getTaskName()));
} }
@DownloadGroup.onTaskCancel void groupTaskCancel(DownloadGroupTask task) { @DownloadGroup.onTaskCancel void groupTaskCancel(DownloadGroupTask task) {
@ -129,6 +130,7 @@ public class MultiTaskActivity extends BaseActivity<ActivityMultiBinding> {
@DownloadGroup.onTaskFail void groupTaskFail(DownloadGroupTask task) { @DownloadGroup.onTaskFail void groupTaskFail(DownloadGroupTask task) {
mAdapter.updateBtState(task.getKey(), true); mAdapter.updateBtState(task.getKey(), true);
Log.d(TAG, String.format("group【%s】fail", task.getTaskName()));
} }
@DownloadGroup.onTaskComplete void taskComplete(DownloadGroupTask task) { @DownloadGroup.onTaskComplete void taskComplete(DownloadGroupTask task) {

@ -79,6 +79,11 @@
<item>http://static.gaoshouyou.com/d/92/12/5592a647b8126755647abbe8074fde39.apk</item> <item>http://static.gaoshouyou.com/d/92/12/5592a647b8126755647abbe8074fde39.apk</item>
</string-array> </string-array>
<string-array name="group_url4">
<item>http://120.79.135.3/img/20180601/VR Karts Sprint.ver.1.04.build.15_crack_align.apk</item>
<item>http://120.79.135.3/img/20180601/main.11.com.daydvr.acefishing.vr.freefull.google.global.android.common.obb</item>
</string-array>
<string-array name="group_names"> <string-array name="group_names">
<!--<item>王者荣耀.apk</item>--> <!--<item>王者荣耀.apk</item>-->
<item>战斗吧剑灵.apk</item> <item>战斗吧剑灵.apk</item>

@ -39,7 +39,7 @@ task clean(type: Delete) {
ext { ext {
userOrg = 'arialyy' userOrg = 'arialyy'
groupId = 'com.arialyy.aria' groupId = 'com.arialyy.aria'
publishVersion = '3.4.2_dev1' publishVersion = '3.4.2_dev6'
// publishVersion = '1.0.3' //FTP插件 // publishVersion = '1.0.3' //FTP插件
repoName='maven' repoName='maven'
desc = 'android 下载框架' desc = 'android 下载框架'

Loading…
Cancel
Save