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) { } }