- Looper不斷獲取MessageQueue中的Message,交由Handler處理
- MessageQueue內(nèi)包含Runnable與Message,Message內(nèi)保存相同類型的Object
- MessageQueue隊列為空后Looper進入休眠
- Handler
- 每個Thread對應(yīng)一個Looper、每個Looper對應(yīng)一個MessageQueue、MessageQueue內(nèi)有多個Message、每個Message對應(yīng)1個Handler、每個MessageQueue可以對應(yīng)多個Handler
- Handler作用:
- 處理Message(Handler.dispatchMessage派發(fā)消息或handleMessage將Message分發(fā)給責(zé)任人)
- 將Message壓入MessageQueue中(程序的有序性,根據(jù)優(yōu)先級決定處理事件的先后順序)
- Handler()初始函數(shù)中獲取當(dāng)前線程中Looper實例,并將其對應(yīng)的MessageQueue(mLooper.mQueue)賦給Handler對應(yīng)MessageQueue(mQueue)
- MessageQueue
- 隊列結(jié)構(gòu),隊內(nèi)數(shù)據(jù)通過指針排序
- Looper
- Looper類中含sThreadLocal靜態(tài)全局變量,一旦import即創(chuàng)建完成
- Looper.prepare根據(jù)保存的模板類sThreadLocal得到返回的Looper
- ThreadLocal范圍僅限于自己所在線程,每個線程Looper是獨立的
class ThreadTest extends Thread{
public Handler mHandler;
public void run(){
Looper.prepare();//
mHandler = new Handler(){//
public void handleMessage(Message msg){
......
}
};
Looper.loop();//進入循環(huán)
}
}