package net.oschina.gitapp.common;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
public class DataRequestThreadHandler extends HandlerThread
implements Handler.Callback{
private Handler mMainHandler;
private Handler mThreadHandler;
public DataRequestThreadHandler() {
super("datarequest_handler");
}
/**
* 请求数据
* */
public synchronized void request(int what, @SuppressWarnings("rawtypes") AsyncDataHandler datahandler) {
if(datahandler == null) {
return;
}
if(!isAlive()) {
//启动线程
start();
}
datahandler.onPreExecute();
if(mThreadHandler == null) {
mThreadHandler = new Handler(getLooper(), this);
}
//将相同的任务移除
mThreadHandler.removeMessages(what);
mThreadHandler.obtainMessage(what, datahandler).sendToTarget();
}
@SuppressWarnings("rawtypes")
@Override
public boolean handleMessage(Message msg) {
final AsyncDataHandler dataHandler = (AsyncDataHandler) msg.obj;
final Object result = dataHandler.execute();
if(mMainHandler == null) {
mMainHandler = new Handler(Looper.getMainLooper());
}
//通过主线程,将数据回调
mMainHandler.post(new Runnable() {
@SuppressWarnings("unchecked")
@Override
public void run() {
dataHandler.onPostExecute(result);
}
});
return true;
}
public static interface AsyncDataHandler<Result> {
/** 准备异步执行前(主线程)*/
public void onPreExecute();
/** 异步执行*/
public Result execute();
/** 主线程回调结果(主线程)*/
public void onPostExecute(Result result);
}
}