修复异步是timer为null的问题
This commit is contained in:
@@ -26,7 +26,6 @@ import android.os.Bundle;
|
|||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.widget.PopupWindow;
|
import android.widget.PopupWindow;
|
||||||
import android.widget.Toast;
|
|
||||||
import com.arialyy.aria.core.command.ICmd;
|
import com.arialyy.aria.core.command.ICmd;
|
||||||
import com.arialyy.aria.core.common.QueueMod;
|
import com.arialyy.aria.core.common.QueueMod;
|
||||||
import com.arialyy.aria.core.download.DownloadEntity;
|
import com.arialyy.aria.core.download.DownloadEntity;
|
||||||
@@ -71,7 +70,6 @@ import org.xml.sax.SAXException;
|
|||||||
* activity 和其Dialog、Fragment的映射表
|
* activity 和其Dialog、Fragment的映射表
|
||||||
*/
|
*/
|
||||||
private Map<String, List<String>> mSubClass = new ConcurrentHashMap<>();
|
private Map<String, List<String>> mSubClass = new ConcurrentHashMap<>();
|
||||||
private List<String> mActivityCount = new ArrayList<>();
|
|
||||||
public static Context APP;
|
public static Context APP;
|
||||||
private List<ICmd> mCommands = new ArrayList<>();
|
private List<ICmd> mCommands = new ArrayList<>();
|
||||||
private Configuration.DownloadConfig mDConfig;
|
private Configuration.DownloadConfig mDConfig;
|
||||||
@@ -470,9 +468,6 @@ import org.xml.sax.SAXException;
|
|||||||
private class LifeCallback implements Application.ActivityLifecycleCallbacks {
|
private class LifeCallback implements Application.ActivityLifecycleCallbacks {
|
||||||
|
|
||||||
@Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
|
@Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
|
||||||
mActivityCount.add(
|
|
||||||
String.format("%s_%s", activity.getClass().getName(), activity.hashCode()));
|
|
||||||
ALog.w(TAG, "size = " + mActivityCount.size());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override public void onActivityStarted(Activity activity) {
|
@Override public void onActivityStarted(Activity activity) {
|
||||||
@@ -497,13 +492,6 @@ import org.xml.sax.SAXException;
|
|||||||
|
|
||||||
@Override public void onActivityDestroyed(Activity activity) {
|
@Override public void onActivityDestroyed(Activity activity) {
|
||||||
removeReceiver(activity);
|
removeReceiver(activity);
|
||||||
mActivityCount.remove(
|
|
||||||
String.format("%s_%s", activity.getClass().getName(), activity.hashCode()));
|
|
||||||
ALog.w(TAG, "size = " + mActivityCount.size());
|
|
||||||
if (mActivityCount.size() == 0) {
|
|
||||||
ALog.e(TAG, "gggg");
|
|
||||||
//Toast.makeText(activity, "destroy", Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package com.arialyy.aria.core.command.normal;
|
package com.arialyy.aria.core.command.normal;
|
||||||
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
import com.arialyy.aria.core.AriaManager;
|
import com.arialyy.aria.core.AriaManager;
|
||||||
import com.arialyy.aria.core.common.QueueMod;
|
import com.arialyy.aria.core.common.QueueMod;
|
||||||
import com.arialyy.aria.core.download.DownloadGroupTaskEntity;
|
import com.arialyy.aria.core.download.DownloadGroupTaskEntity;
|
||||||
@@ -82,14 +83,14 @@ class StartCmd<T extends AbsTaskEntity> extends AbsNormalCmd<T> {
|
|||||||
|| task.getState() == IEntity.STATE_COMPLETE) {
|
|| task.getState() == IEntity.STATE_COMPLETE) {
|
||||||
resumeTask();
|
resumeTask();
|
||||||
} else {
|
} else {
|
||||||
sendWaitState();
|
sendWaitState(task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//任务没执行并且执行队列中没有该任务,才认为任务没有运行中
|
//任务没执行并且执行队列中没有该任务,才认为任务没有运行中
|
||||||
if (!task.isRunning() && !mQueue.taskIsRunning(task.getKey())) {
|
if (!task.isRunning() && !mQueue.taskIsRunning(task.getKey())) {
|
||||||
resumeTask();
|
resumeTask();
|
||||||
}else {
|
} else {
|
||||||
ALog.w(TAG, String.format("任务【%s】已经在运行", task.getTaskName()));
|
ALog.w(TAG, String.format("任务【%s】已经在运行", task.getTaskName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -152,7 +153,8 @@ class StartCmd<T extends AbsTaskEntity> extends AbsNormalCmd<T> {
|
|||||||
AbsTask task = getTask(te.getEntity());
|
AbsTask task = getTask(te.getEntity());
|
||||||
if (task != null) continue;
|
if (task != null) continue;
|
||||||
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();
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mConstance.resetState();
|
mConstance.resetState();
|
||||||
checkTask();
|
checkRecord();
|
||||||
mConstance.TASK_RECORD = mRecord;
|
mConstance.TASK_RECORD = mRecord;
|
||||||
if (mListener instanceof IDownloadListener) {
|
if (mListener instanceof IDownloadListener) {
|
||||||
((IDownloadListener) mListener).onPostPre(mEntity.getFileSize());
|
((IDownloadListener) mListener).onPostPre(mEntity.getFileSize());
|
||||||
@@ -183,10 +183,12 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void closeTimer() {
|
protected void closeTimer() {
|
||||||
if (mTimer != null) {
|
synchronized (AbsFileer.class) {
|
||||||
mTimer.purge();
|
if (mTimer != null) {
|
||||||
mTimer.cancel();
|
mTimer.purge();
|
||||||
mTimer = null;
|
mTimer.cancel();
|
||||||
|
mTimer = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,14 +263,13 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检查任务、检查线程数
|
* 检查记录
|
||||||
* 新任务条件:
|
* 对于分块任务:
|
||||||
* 1、文件不存在
|
* 子分块不存在或被删除,子线程将重新下载
|
||||||
* 2、任务记录文件缺失或不匹配
|
* 对于普通任务:
|
||||||
* 3、数据库记录不存在
|
* 预下载文件不存在,则任务任务呗删除
|
||||||
* 4、不支持断点,则是新任务
|
|
||||||
*/
|
*/
|
||||||
private void checkTask() {
|
private void checkRecord() {
|
||||||
mConfigFile = new File(CommonUtil.getFileConfigPath(false, mEntity.getFileName()));
|
mConfigFile = new File(CommonUtil.getFileConfigPath(false, mEntity.getFileName()));
|
||||||
if (mConfigFile.exists()) {
|
if (mConfigFile.exists()) {
|
||||||
convertDb();
|
convertDb();
|
||||||
@@ -279,12 +280,32 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
|
|||||||
} else {
|
} else {
|
||||||
if (mRecord.threadRecords == null || mRecord.threadRecords.isEmpty()) {
|
if (mRecord.threadRecords == null || mRecord.threadRecords.isEmpty()) {
|
||||||
initRecord(true);
|
initRecord(true);
|
||||||
}
|
} else if (mRecord.isBlock) {
|
||||||
//else if (mTempFile.length() == 0) {
|
for (ThreadRecord tr : mRecord.threadRecords) {
|
||||||
// mRecord.deleteData();
|
File temp = new File(String.format(SUB_PATH, mRecord.filePath, tr.threadId));
|
||||||
// initRecord(true);
|
if (!temp.exists()) {
|
||||||
//}
|
ALog.w(TAG, String.format("分块文件【%s】不存在,该分块将重新开始", temp.getPath()));
|
||||||
else {
|
tr.isComplete = false;
|
||||||
|
tr.startLocation = -1;
|
||||||
|
mStartThreadNum++;
|
||||||
|
} else {
|
||||||
|
if (tr.isComplete) {
|
||||||
|
mCompleteThreadNum++;
|
||||||
|
} else {
|
||||||
|
mStartThreadNum++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mTotalThreadNum = mRecord.threadRecords.size();
|
||||||
|
mTaskEntity.setNewTask(false);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
File file = new File(mRecord.filePath);
|
||||||
|
if (!file.exists()) {
|
||||||
|
ALog.w(TAG, String.format("下载文件【%s】不存在,任务将重新开始", file.getPath()));
|
||||||
|
mRecord.deleteData();
|
||||||
|
initRecord(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
for (ThreadRecord tr : mRecord.threadRecords) {
|
for (ThreadRecord tr : mRecord.threadRecords) {
|
||||||
if (tr.isComplete) {
|
if (tr.isComplete) {
|
||||||
mCompleteThreadNum++;
|
mCompleteThreadNum++;
|
||||||
|
|||||||
@@ -321,11 +321,13 @@ public abstract class AbsGroupUtil implements IUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void closeTimer() {
|
void closeTimer() {
|
||||||
isRunning = false;
|
synchronized (LOCK) {
|
||||||
if (mTimer != null) {
|
isRunning = false;
|
||||||
mTimer.purge();
|
if (mTimer != null) {
|
||||||
mTimer.cancel();
|
mTimer.purge();
|
||||||
mTimer = null;
|
mTimer.cancel();
|
||||||
|
mTimer = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,11 @@
|
|||||||
android:theme="@style/AppTheme.NoActionBar">
|
android:theme="@style/AppTheme.NoActionBar">
|
||||||
<!--android:name=".test.TestActivity"-->
|
<!--android:name=".test.TestActivity"-->
|
||||||
<!--android:name=".test.AnyRunActivity"-->
|
<!--android:name=".test.AnyRunActivity"-->
|
||||||
<!--android:name=".download.group.DownloadGroupActivity"-->
|
|
||||||
<!--android:name=".test.TestGroupActivity"-->
|
<!--android:name=".test.TestGroupActivity"-->
|
||||||
<!--android:name=".MainActivity"-->
|
<!--android:name="com.arialyy.simple.test.AnyRunActivity"-->
|
||||||
|
<!--android:name=".download.group.DownloadGroupActivity"-->
|
||||||
<activity
|
<activity
|
||||||
android:name="com.arialyy.simple.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"/>
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
<threadNum value="3"/>
|
<threadNum value="3"/>
|
||||||
|
|
||||||
<!--设置下载队列最大任务数, 默认为2-->
|
<!--设置下载队列最大任务数, 默认为2-->
|
||||||
<maxTaskNum value="2"/>
|
<maxTaskNum value="1"/>
|
||||||
|
|
||||||
<!--设置下载失败,重试次数,默认为10-->
|
<!--设置下载失败,重试次数,默认为10-->
|
||||||
<reTryNum value="2"/>
|
<reTryNum value="2"/>
|
||||||
|
|||||||
@@ -46,13 +46,13 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
|
|||||||
private static final String DOWNLOAD_URL =
|
private static final String DOWNLOAD_URL =
|
||||||
//"http://kotlinlang.org/docs/kotlin-docs.pdf";
|
//"http://kotlinlang.org/docs/kotlin-docs.pdf";
|
||||||
//"https://atom-installer.github.com/v1.13.0/AtomSetup.exe?s=1484074138&ext=.exe";
|
//"https://atom-installer.github.com/v1.13.0/AtomSetup.exe?s=1484074138&ext=.exe";
|
||||||
//"http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk";
|
"http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk";
|
||||||
//"http://58.210.9.131/tpk/sipgt//TDLYZTGH.tpk"; //chunked 下载
|
//"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://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";
|
//"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";
|
//"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";
|
//"https://dl.genymotion.com/releases/genymotion-2.12.1/genymotion-2.12.1-vbox.exe";
|
||||||
@Bind(R.id.start) Button mStart;
|
@Bind(R.id.start) Button mStart;
|
||||||
@Bind(R.id.stop) Button mStop;
|
@Bind(R.id.stop) Button mStop;
|
||||||
@Bind(R.id.cancel) Button mCancel;
|
@Bind(R.id.cancel) Button mCancel;
|
||||||
@@ -220,8 +220,8 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
|
|||||||
startD();
|
startD();
|
||||||
break;
|
break;
|
||||||
case R.id.stop:
|
case R.id.stop:
|
||||||
//Aria.download(this).load(DOWNLOAD_URL).stop();
|
Aria.download(this).load(DOWNLOAD_URL).stop();
|
||||||
startActivity(new Intent(this, SingleTaskActivity.class));
|
//startActivity(new Intent(this, SingleTaskActivity.class));
|
||||||
//Aria.download(this).load(DOWNLOAD_URL).removeRecord();
|
//Aria.download(this).load(DOWNLOAD_URL).removeRecord();
|
||||||
break;
|
break;
|
||||||
case R.id.cancel:
|
case R.id.cancel:
|
||||||
|
|||||||
@@ -92,8 +92,8 @@ public class DownloadGroupActivity extends BaseActivity<ActivityDownloadGroupBin
|
|||||||
Aria.download(this).loadGroup(mUrls).stop();
|
Aria.download(this).loadGroup(mUrls).stop();
|
||||||
break;
|
break;
|
||||||
case R.id.cancel:
|
case R.id.cancel:
|
||||||
//Aria.download(this).load(mUrls).cancel(true);
|
Aria.download(this).loadGroup(mUrls).cancel(true);
|
||||||
Aria.download(this).removeAllTask(true);
|
//Aria.download(this).removeAllTask(true);
|
||||||
//mUrls = getModule(GroupModule.class).getUrls1();
|
//mUrls = getModule(GroupModule.class).getUrls1();
|
||||||
//Aria.download(this)
|
//Aria.download(this)
|
||||||
// .load(mUrls)
|
// .load(mUrls)
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ public class MultiDownloadActivity extends BaseActivity<ActivityMultiDownloadBin
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DownloadGroup.onWait void groupTaskWait(DownloadGroupTask task) {
|
@DownloadGroup.onWait void groupTaskWait(DownloadGroupTask task) {
|
||||||
ALog.d(TAG, String.format("group【%s】wait", task.getTaskName()));
|
ALog.d(TAG, String.format("group【%s】wait---", task.getTaskName()));
|
||||||
mAdapter.updateState(task.getEntity());
|
mAdapter.updateState(task.getEntity());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import com.arialyy.annotations.DownloadGroup;
|
|||||||
import com.arialyy.aria.core.Aria;
|
import com.arialyy.aria.core.Aria;
|
||||||
import com.arialyy.aria.core.download.DownloadGroupTask;
|
import com.arialyy.aria.core.download.DownloadGroupTask;
|
||||||
import com.arialyy.aria.core.download.DownloadTask;
|
import com.arialyy.aria.core.download.DownloadTask;
|
||||||
|
import com.arialyy.aria.util.ALog;
|
||||||
import com.arialyy.frame.util.FileUtil;
|
import com.arialyy.frame.util.FileUtil;
|
||||||
import com.arialyy.simple.R;
|
import com.arialyy.simple.R;
|
||||||
import com.arialyy.simple.base.BaseActivity;
|
import com.arialyy.simple.base.BaseActivity;
|
||||||
@@ -119,6 +120,11 @@ public class MultiTaskActivity extends BaseActivity<ActivityMultiBinding> {
|
|||||||
mAdapter.updateBtState(task.getKey(), false);
|
mAdapter.updateBtState(task.getKey(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DownloadGroup.onWait void groupTaskWait(DownloadGroupTask task) {
|
||||||
|
ALog.d(TAG, String.format("group【%s】wait---", task.getTaskName()));
|
||||||
|
mAdapter.updateBtState(task.getKey(), true);
|
||||||
|
}
|
||||||
|
|
||||||
@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()));
|
Log.d(TAG, String.format("group【%s】stop", task.getTaskName()));
|
||||||
|
|||||||
Reference in New Issue
Block a user