package com.jqmobile.core.utils.thread;
public abstract class AsyncTask<Params, Result> {
protected final static BaseThreadPool btp = new BaseThreadPool(50, 10000);
static{
btp.start();
}
public static enum Status {
/**
* 已完成
*/
FINISHED(),
/**
* 等待中
*/
PENDING(),
/**
* 执行中
*/
RUNNING();
}
Status status=Status.PENDING;
private boolean cancel;
private Params[] params;
private Result result;
public AsyncTask() {
}
public static int getTaskCount(){
return btp.getTaskCount();
}
public static int getThreadCount(){
return btp.getThreadCount();
}
/**
* 获取当前任务执行状态
* @return
*/
public final AsyncTask.Status getStatus() {
return this.status;
}
protected abstract Result doInBackground(Params... params) throws Throwable;
/**
* 任务执行之前(主线程执行方法)
*/
protected void onPreExecute() {
}
/**
* 执行结果处理
* @param result
*/
protected void onPostExecute(Result result) {
}
/**
* 取消任务
*/
protected void onCancelled() {
btp.remove(this);
this.cancel = true;
}
public final boolean isCancelled() {
return this.cancel;
}
/**
* 取消任务
* @param mayInterruptIfRunning 能否终端正在执行任务
* @return
*/
public final boolean cancel(boolean mayInterruptIfRunning) {
if(getStatus()==Status.PENDING){
onCancelled();
return true;
}
return false;
}
// /**
// * 获得执行结果,堵塞方法
// * @return
// * @throws java.lang.InterruptedException
// * @throws java.util.concurrent.ExecutionException
// */
// public final Result get() throws java.lang.InterruptedException,
// java.util.concurrent.ExecutionException {
// return result;
// }
//
// /**
// * 获得执行结果,堵塞方法,等待指定时间
// * @param timeout
// * @param unit
// * @return
// * @throws java.lang.InterruptedException
// * @throws java.util.concurrent.ExecutionException
// * @throws java.util.concurrent.TimeoutException
// */
// public final Result get(long timeout, java.util.concurrent.TimeUnit unit)
// throws java.lang.InterruptedException,
// java.util.concurrent.ExecutionException,
// java.util.concurrent.TimeoutException {
// return result;
// }
/**
* 执行任务
* @param params
* @return
*/
public AsyncTask<Params, Result> execute(Params... params) {
setParams(params);
try {
btp.putTask(this);
} catch (WaitingQueueToBigException e) {
e.printStackTrace();
}
return this;
}
public Params[] getParams() {
return params;
}
protected void setParams(Params... params) {
this.params = params;
}
final void setResult(Result result) {
this.result = result;
}
final Result getResult() {
return result;
}
/**
* 执行异常处理
* @param e
*/
protected void onException(Throwable e) {
}
}