自定义的TaskListener对应AsyncTask的四个重要方法,在GenericTask中各方法调用TaskListener中对应的方法。这样就可以在Activity中定义TaskListener,实现UI的更新。
public interface TaskListener { String getName(); void onPreExecute(GenericTask task); void onPostExecute(GenericTask task, TaskResult result); void onProgressUpdate(GenericTask task, Object param); void onCancelled(GenericTask task); }
public abstract class GenericTask extends AsyncTask<TaskParams, Object, TaskResult> { private static final String TAG = "GenericTask"; private TaskListener mListener = null; private boolean isCancelable = true; abstract protected TaskResult _doInBackground(TaskParams...params); public void setListener(TaskListener taskListener){ mListener = taskListener; } public TaskListener getListener(){ return mListener; } public void doPublishProgress(Object... values){ super.publishProgress(values); } @Override protected void onCancelled() { super.onCancelled(); if (mListener != null){ mListener.onCancelled(this); } } @Override protected void onPostExecute(TaskResult result) { super.onPostExecute(result); if (mListener != null){ mListener.onPostExecute(this, result); } } @Override protected void onPreExecute() { super.onPreExecute(); if (mListener != null){ mListener.onPreExecute(this); } } @Override protected void onProgressUpdate(Object... values) { super.onProgressUpdate(values); if (mListener != null){ if (values != null && values.length > 0){ mListener.onProgressUpdate(this, values[0]); } } } @Override protected TaskResult doInBackground(TaskParams... params){ return _doInBackground(params); } public void setCancelable(boolean flag) { isCancelable = flag; } }