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發出來的。