上一篇理解了Android系统中Handler的机制,见Android中的Handler机制解析,那么我们就来用Handler制作一个简易的网络请求框架。
如下图:
解释一下:UI在request的时候传入UI中的Handler,同时将请求的Runnable推入到工作线程对应中的Handler,在工作线程中的Handler调用完毕之后,有通过传递过来的UI的Handler将数据传送到UI,更新页面。
其实核心就是UI中的Handler和工作线程中的Handler,UI中的Handler负责数据的传递,工作线程中的Handler负责请求的队列和调度。那么来看具体的代码:
首先是工作线程:
public class SvrBgThread extends Thread {
private static String TAG = "SvrBgThread";
private Handler mBgTaskHandler;
public static final class TaskCmd {
/**
* 接收后台消息
*/
public static final int ACCEPT_MSG = 1;
/**
* 拒绝后台消息
*/
public static final int REFUSE_MSG = ACCEPT_MSG + 1;
/**
* 退出后台线程
*/
public static final int EXIT_TASK = REFUSE_MSG + 1;
}
private Runnable currentRunnable;
@Override
public void run() {
synchronized (SvrBgThread.this) {
Looper.prepare();
mBgTaskHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
int what = msg.what;
switch (what) {
case TaskCmd.ACCEPT_MSG:
break;
case TaskCmd.REFUSE_MSG:
cancelTask(currentRunnable);
break;
case TaskCmd.EXIT_TASK:
Looper.getMainLooper().quit();
break;
}
}
@Override
public void dispatchMessage(Message msg) {
if (msg.getCallback() != null) {
currentRunnable = msg.getCallback();
}
super.dispatchMessage(msg);
}
};
Looper.loop();
}
}
private void cancelTask(Runnable runnable) {
if (runnable == null) {
return;
}
}
public synchronized void cancelCurrentTask() {
cancelTask(currentRunnable);
}
public synchronized void cancelAllTask() {
if (mBgTaskHandler == null)
return;
//移除所有命令
mBgTaskHandler.removeCallbacksAndMessages(null);
cancelCurrentTask();
}
public synchronized Handler getBgTaskHandler() {