package com.mzeat.task;
import java.util.Observable;
import java.util.Observer;
import android.os.AsyncTask;
import android.util.Log;
/**
* 抽象类GenericTask,从AsyncTask继承,并实现Observer
*
* @author windhuiyi
*
*/
public abstract class GenericTask extends AsyncTask<TaskParams, Object, TaskResult> implements Observer {
private static final String TAG = "GenericTask";
private TaskListener mListener = null;
private boolean isCancelable = true;
/**
* 抽象方法_doInBackground
* @param params
* @return
*/
abstract protected TaskResult _doInBackground(TaskParams... params);
/**
* 设置监听者
* @param taskListener
*/
public void setListener(TaskListener taskListener) {
mListener = taskListener;
}
/**
* 取得监听者
* @return
*/
public TaskListener getListener() {
return mListener;
}
/**
* 显示任务进度
* @param values
*/
public void doPublishProgress(Object... values) {
super.publishProgress(values);
}
/**
* 取消任务
*/
@Override
protected void onCancelled() {
super.onCancelled();
if (mListener != null) {
mListener.onCancelled(this);
}
//Log.i(TAG, mListener.getName() + " has been Cancelled.");
}
/**
* 任务执行完成
*/
@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 update(Observable o, Object arg) {
if (TaskManager.CANCEL_ALL == (Integer) arg && isCancelable) {
if (getStatus() == GenericTask.Status.RUNNING) {
cancel(true);
}
}
}
/**
* 设置是否可以取消
* @param flag
*/
public void setCancelable(boolean flag) {
isCancelable = flag;
}
}