org.xutils.common.task.AbsTask
package org.xutils.common.task;
import org.xutils.common.Callback;
import java.util.concurrent.Executor;
/**
* @author 注释者:王教成
* @version 注释版:1.0.0
* 异步任务基类
* @param <ResultType> 泛型
*/
public abstract class AbsTask<ResultType> implements Callback.Cancelable {
private TaskProxy taskProxy = null;//声明异步任务代理
private final Callback.Cancelable cancelHandler;//声明回调接口中可取消接口
private volatile boolean isCancelled = false;//声明是否已取消标记
private volatile State state = State.IDLE;//声明内部状态类实例IDLE
private ResultType result;//声明泛型类型
public AbsTask() {
this(null);
}//构造器
public AbsTask(Callback.Cancelable cancelHandler) {
this.cancelHandler = cancelHandler;
}//构造器:初始化回调接口中可取消接口
//子类实现抽象方法3个
protected abstract ResultType doBackground() throws Throwable;//背景抽象方法
protected abstract void onSuccess(ResultType result);//成功抽象方法
protected abstract void onError(Throwable ex, boolean isCallbackError);//错误抽象方法
//子类重写空方法5个
protected void onWaiting() {
}//等待中方法
protected void onStarted() {
}//已开始方法
protected void onUpdate(int flag, Object... args) {
}//升级方法
protected void onCancelled(Callback.CancelledException cex) {
}//已取消方法
protected void onFinished() {
}//已完成方法
//子类重写getter方法2个
public Priority getPriority() {
return null;
}//获取优先级方法
public Executor getExecutor() {
return null;
}//获取执行器方法
/**
* 封装异步任务代理类中实现的本类onUpdate方法
* @param flag 旗标
* @param args 对象数组
*/
protected final void update(int flag, Object... args) {
if (taskProxy != null) {
taskProxy.onUpdate(flag, args);//任务代理器非空执行实例方法
}
}
/**
* HTTP任务类中实现
* @return 返回取消任务时是否不等待任务彻底结束,立即收到取消的通知
*/
protected boolean isCancelFast() {
return false;
}
/**
* HTTP任务类中实现,通过cancel方法调用
*/
protected void cancelWorks() {
}
/**
* 实现回调接口中可取消接口内取消回调方法
*/
@Override
public final synchronized void cancel() {
if (!this.isCancelled) {
this.isCancelled = true;
cancelWorks();//调用本类中方法
if (cancelHandler != null && !cancelHandler.isCancelled()) {
cancelHandler.cancel();//非空或true执行cancel方法
}
if (this.state == State.WAITING || (this.state == State.STARTED && isCancelFast())) {
if (taskProxy != null) {
taskProxy.onCancelled(new Callback.CancelledException("cancelled by user"));
taskProxy.onFinished();
} else if (this instanceof TaskProxy) {
this.onCancelled(new Callback.CancelledException("cancelled by user"));
this.onFinished();
}
}//如果等待状态,或者状态已开始且快速取消false
}
}
/**
* 判断是否已取消
* @return 返回是否已取消
*/
@Override
public final boolean isCancelled() {
return isCancelled || state == State.CANCELLED ||
(cancelHandler != null && cancelHandler.isCancelled());
}//返回false,或状态是否已取消,或是否可取消接口非空与判断已取消都true
/**
* 判断是否已完成
* @return 返回是否已完成
*/
public final boolean isFinished() {
return this.state.value() > State.STARTED.value();
}
/**
* 设置异步任务代理器
* @param taskProxy 异步任务代理器
*/
/*package*/
final void setTaskProxy(TaskProxy taskProxy) {
this.taskProxy = taskProxy;
}
/**
* 获取泛型结果类型
* @return 返回泛型结果类型
*/
public final ResultType getResult() {
return result;
}
/**
* 设置泛型结果类型
* @param result 泛型结果类型
*/
/*package*/
final void setResult(ResultType result) {
this.result = result;
}
/**
* 获取状态
* @return 返回状态
*/
public final State getState() {
return state;
}
/**
* 设置状态
* @param state 状态
*/
/*package*/
void setState(State state) {
this.state = state;
}
/**
* 状态枚举内部类
*/
public enum State {
IDLE(0), WAITING(1), STARTED(2), SUCCESS(3), CANCELLED(4), ERROR(5);
private final int value;
private State(int value) {
this.value = http://www.gunmi.cn/v/value;
}//构造器
/**
* 获取value值
* @return 返回value值
*/
public int value() {
return value;
}
}
}