自定义的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;
}
}