用于后台执行线程的基类


package com.hk.wos;

import android.os.AsyncTask;

/**
 * 方便在activity中获取网络任务
 * 
 * @author 包子大叔
 * @time 2013-8-15 下午4:16:18
 */
public abstract class BaseTaskActivity extends BaseActivity {
	/**
	 * 后台线程,一般用于获取网络任务
	 */
	protected MyTask myTask;

	/**
	 * 判断默认线程myTask是否正在运行
	 * 
	 * @return
	 */
	protected boolean isTaskWorking() {
		if (myTask != null) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 启动线程,一般用于网络数据的获取; 线程主体请实现doInTask()方法, 线程结束后将调用onTaskOver()方法;
	 */
	protected void startTask() {
		if (isTaskWorking()) {
			toast("任务正在执行...");
		} else {
			showDialogLoading(true);
			myTask = new MyTask();
			myTask.execute();
		}
	}

	/**
	 * 线程主体,只能做数据处理,不能处理UI
	 * 
	 * @return 返回网络任务得到的json字符串,本字符串会传入onTaskOver()方法中
	 */
	abstract protected String doInTask();

	/**
	 * 线程完成后触发本方法,可以在这里进行数据处理,UI处理,(不需要关系线程和等待中对话框)
	 * 
	 * @param result
	 *            后台线程主体doInTask()方法返回的字符串
	 */
	abstract protected void onTaskOver(String result);

	/**
	 * 一般用于获取网络数据
	 * 
	 * @author 包子大叔
	 * @time 2013-8-15 下午4:14:58
	 */
	public class MyTask extends AsyncTask<Void, Void, Boolean> {
		String result = "";

		@Override
		protected Boolean doInBackground(Void... params) {
			result = doInTask();
			return true;
		}

		@Override
		protected void onPostExecute(final Boolean success) {
			myTask = null;
			showDialogLoading(false);
			onTaskOver(result);
		}

		@Override
		protected void onCancelled() {
			myTask = null;
			showDialogLoading(false);
		}
	}
}


猜你喜欢

转载自zheyiw.iteye.com/blog/1925040