故名思意,Looper就是一个消息循环,而Handler就是一个消息处理器,在非UI线程中,线程默认是不存在消息循环的,因此在创建Handler的时候会抛出异常,在创建Handler对象之前,必须调用Looper.prepare(),然后创建Handler对象,最后启动消息循环:Looper.loop();
public class LoopThread extends Thread {
public interface HandlerCreater {
Handler createHandler();
}
private Handler mHandler = null;
private HandlerCreater mHandlerCreater;
LoopThread(HandlerCreater hc) {
mHandlerCreater = hc;
}
@Overwrite
public void run() {
Looper.prepare();
mHandler = mHandlerCreater.createHandler();
Looper.loop();
mHandler = null;
}
public void sendMessage(Message msg) {
if (null != mHandler) {
mHandler.sendMessage(msg);
}
}
}
这样,在主线程中只要实现一个HandleCreater,创建出自己合适的Handler,然后就可以启动线程,并向其发消息了。
跳出消息循环使用:Looper.myLooper().quit();