Apt 下载事件完成

This commit is contained in:
AriaLyy
2017-06-07 20:15:05 +08:00
parent 8049af34e0
commit 603a21fe43
14 changed files with 261 additions and 197 deletions

View File

@ -176,11 +176,13 @@ import org.xml.sax.SAXException;
if (isDownload) {
DownloadReceiver dReceiver = new DownloadReceiver();
dReceiver.targetName = obj.getClass().getName();
dReceiver.obj = obj;
mReceivers.put(key, dReceiver);
receiver = dReceiver;
} else {
UploadReceiver uReceiver = new UploadReceiver();
uReceiver.targetName = obj.getClass().getName();
uReceiver.obj = obj;
mReceivers.put(key, uReceiver);
receiver = uReceiver;
}
@ -303,6 +305,7 @@ import org.xml.sax.SAXException;
if (key.contains(clsName)) {
IReceiver receiver = mReceivers.get(key);
receiver.removeSchedulerListener();
receiver.unRegister();
receiver.destroy();
iter.remove();
break;

View File

@ -36,6 +36,7 @@ import java.util.Set;
public class DownloadReceiver implements IReceiver<DownloadEntity> {
private static final String TAG = "DownloadReceiver";
public String targetName;
public Object obj;
public ISchedulerListener<DownloadTask> listener;
/**
@ -72,16 +73,16 @@ public class DownloadReceiver implements IReceiver<DownloadEntity> {
* 将当前类注册到Aria
*/
public DownloadReceiver register() {
DownloadSchedulers.getInstance().register(targetName);
DownloadSchedulers.getInstance().register(obj);
return this;
}
/**
* 取消注册
*/
public DownloadReceiver unRegister() {
DownloadSchedulers.getInstance().unRegister(targetName);
return this;
@Override
public void unRegister() {
DownloadSchedulers.getInstance().unRegister(obj);
}
/**
@ -149,6 +150,7 @@ public class DownloadReceiver implements IReceiver<DownloadEntity> {
for (String key : keys) {
IReceiver receiver = ariaManager.getReceiver().get(key);
receiver.removeSchedulerListener();
receiver.unRegister();
ariaManager.getReceiver().remove(key);
}
}

View File

@ -31,6 +31,11 @@ public interface IReceiver<ENTITY extends IEntity> {
*/
public void removeSchedulerListener();
/**
* 移除观察者
*/
public void unRegister();
/**
* 停止所有任务
*/

View File

@ -56,4 +56,12 @@ public class AbsSchedulerListener<TASK extends ITask> implements ISchedulerListe
@Override public void onTaskRunning(TASK task) {
}
public void onNoSupportBreakPoint(TASK task) {
}
public void setListener(Object obj) {
}
}

View File

@ -49,7 +49,7 @@ public abstract class AbsSchedulers<TASK_ENTITY extends AbsTaskEntity, ENTITY ex
/**
* @param targetName 观察者,创建该监听器的对象类名
* @param schedulerListener {@link ISchedulerListener}
* @see #register(String)
* @see #register(Object)
*/
@Deprecated @Override public void addSchedulerListener(String targetName,
ISchedulerListener<TASK> schedulerListener) {
@ -58,7 +58,7 @@ public abstract class AbsSchedulers<TASK_ENTITY extends AbsTaskEntity, ENTITY ex
/**
* @param targetName 观察者,创建该监听器的对象类名
* @see #unRegister(String)
* @see #unRegister(Object)
*/
@Override public void removeSchedulerListener(String targetName,
ISchedulerListener<TASK> schedulerListener) {
@ -70,18 +70,21 @@ public abstract class AbsSchedulers<TASK_ENTITY extends AbsTaskEntity, ENTITY ex
}
}
@Override public void register(String targetName) {
@Override public void register(Object obj) {
String targetName = obj.getClass().getName();
AbsSchedulerListener<TASK> listener = mObservers.get(targetName);
if (listener == null) {
mObservers.put(targetName, createListener(targetName));
listener = createListener(targetName);
listener.setListener(obj);
mObservers.put(targetName, listener);
}
}
@Override public void unRegister(String targetName) {
@Override public void unRegister(Object obj) {
for (Iterator<Map.Entry<String, AbsSchedulerListener<TASK>>> iter =
mObservers.entrySet().iterator(); iter.hasNext(); ) {
Map.Entry<String, AbsSchedulerListener<TASK>> entry = iter.next();
if (entry.getKey().equals(targetName)) iter.remove();
if (entry.getKey().equals(obj.getClass().getName())) iter.remove();
}
}
@ -151,12 +154,12 @@ public abstract class AbsSchedulers<TASK_ENTITY extends AbsTaskEntity, ENTITY ex
if (mSchedulerListeners.size() > 0) {
Set<String> keys = mSchedulerListeners.keySet();
for (String key : keys) {
if (mSchedulerListeners.size() > 0) {
callback(state, task, mSchedulerListeners.get(key));
}
if (mObservers.size() > 0) {
callback(state, task, mObservers.get(key));
}
callback(state, task, mSchedulerListeners.get(key));
}
} else if (mObservers.size() > 0) {
Set<String> keys = mObservers.keySet();
for (String key : keys) {
callback(state, task, mObservers.get(key));
}
}
}

View File

@ -84,14 +84,14 @@ public interface ISchedulers<Task extends ITask> extends Handler.Callback {
/**
* 将当前类注册到Aria
*
* @param targetName 类完整路径
* @param obj 观察者类
*/
public void register(String targetName);
public void register(Object obj);
/**
* 移除注册
*
* @param targetName 类完整路径
* @param obj 观察者类
*/
public void unRegister(String targetName);
public void unRegister(Object obj);
}

View File

@ -19,8 +19,10 @@ import android.support.annotation.NonNull;
import com.arialyy.aria.core.AriaManager;
import com.arialyy.aria.core.command.AbsCmd;
import com.arialyy.aria.core.command.CmdFactory;
import com.arialyy.aria.core.download.DownloadReceiver;
import com.arialyy.aria.core.inf.IEntity;
import com.arialyy.aria.core.inf.IReceiver;
import com.arialyy.aria.core.scheduler.DownloadSchedulers;
import com.arialyy.aria.core.scheduler.ISchedulerListener;
import com.arialyy.aria.core.scheduler.UploadSchedulers;
import com.arialyy.aria.orm.DbEntity;
@ -38,6 +40,7 @@ import java.util.regex.Pattern;
public class UploadReceiver implements IReceiver<UploadEntity> {
private static final String TAG = "DownloadReceiver";
public String targetName;
public Object obj;
public ISchedulerListener<UploadTask> listener;
/**
@ -127,4 +130,16 @@ public class UploadReceiver implements IReceiver<UploadEntity> {
UploadSchedulers.getInstance().removeSchedulerListener(targetName, listener);
}
}
/**
* 将当前类注册到Aria
*/
public UploadReceiver register() {
UploadSchedulers.getInstance().register(obj);
return this;
}
@Override public void unRegister() {
UploadSchedulers.getInstance().unRegister(obj);
}
}