Message:Handler接收和处理的消息对象。
Looper:每个线程只能拥有一个Looper。loop方法负责读取MessageQueue中的消息,交给发送消息的Handler处理。
MessageQueue:消息队列,采取先进先出的方式管理Message。
private Looper(){
mQueue =new MessageQueue();
mRun =true;
mThread =Thread.currentThread;
}
public static final prepare(){
if(sThreadLocal.get() !=null){
throw new RuntimeException("Only one Looper may be created per thread");
}
sThreadLocal.set(new Looper());
}
prepare()方法保证每个线程最多只有一个Looper对象。
Looper的静态loop()方法来启动。loop()是一个死循环不断取出MessageQueue的消息。
在线程中使用Handler的步骤如下:
1)调用Looper的prepare()方法为当前线程创建Looper对象,它的构造器将会与之配套创建MessageQueue。
2)创建Handler子类的实例,重写handleMessage()方法,用于处理其他线程。
3)调用Looper的 loop()方法启动。
示例:
Class TestThread extends Thread{
public Handler mHandler;
public void run(){
Looper.prepare();
mHandler =new Handler(){
@Override
public void handleMessage(Message msg){
if(msg.what==0x123){
//处理来自其他线程的消息
}
}
};
Looper.loop();
}
}