message :消息,包含消息id,以及一些处理的数据。由messagequeue统一处理。
handler:处理者,负责message的发放以及处理。
messagequeue:消息队列,用于存放handler发送过来的消息,按照fifo,并等待looper的抽取。
looper:消息泵,不断地从messagequeue中抽取message执行
thread:线程,负责调度整个消息循环,既消息循环的场所。
1、在ui线程中,系统会自动创建一个messagequeue,并会执行looper循环。但是在其余新开的线程当中需要手动去开启消息循环机制
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
2、在一个线程中,一个looper对应一个messagequeue。但是一个looper对应许许多多的handler。但是这些handler和looper必须处于同一个线程当中。且是通过message.what来区分这个message是属于哪个handler发出来的。