Custom a SimpleAsyncTask

package com.example.main;

import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;

/**
 * @功能描述 : 
 *		自定义异步任务类, 封装HandlerThread实现异步线程
 * @param <Result>
 *
 * @原 作 者 :   Jhen
 * @版 本 号 :  [版本号, Aug 4, 2013]
 *
 * @修 改 人 :  mrsimple
 * @修改内容 :
 */
public abstract class SimpleAsyncTask<Result> {
	// HandlerThread内部封装了自己的Handler和Thead,有单独的Looper和消息队列
	private static final HandlerThread mHt  = new HandlerThread(SocialServiceImpl.class.getName(), 
															android.os.Process.THREAD_PRIORITY_BACKGROUND);
	static{
		mHt.start(); // 启动线程,轮询消息队列
	}
	
	/**
	 * @功能描述 : onPreExecute任务执行之前的初始化操作等
	 */
    protected void onPreExecute() {
    	
    }
    
    /**
     * @功能描述 : doInBackground后台执行任务
     * @return
     */
    protected abstract Result doInBackground();
	
    /**
     * @功能描述 : doInBackground返回结果,在onPostExecute更新UI线程
     * @param result
     */
    protected void onPostExecute(Result result) {
    }
    
    /**
     * @功能描述 : execute方法
     * @return
     */
    public final SimpleAsyncTask<Result>  execute(){
    	// 获取调用execute的线程的Looper, 构建Handler
    	final Handler parentHandler = new Handler(Looper.myLooper());
    	//  获取mHt的Looper, 并且构造Handler, 注意的是Looper与ch的是不一样的.
    	Handler htHandler = new Handler(mHt.getLooper());
    	
    	onPreExecute();
    	htHandler.post(new Runnable() {
			@Override
			public void run() {
				// 后台执行任务
				final Result result = doInBackground();
				// 向UI线程post数据,用以更新UI等操作
				parentHandler.post(new Runnable() {
					@Override
					public void run() {
						onPostExecute(result);
					}
				});
			}
		});
    	
    	return this;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值