ITEEDU

GenericTask

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