Handler里面主要的幾個元素:Message,MessageQueue,Looper
一. Handler的構(gòu)造方法,會首先得到當前線程中保存的Looper實例,進而與Looper實例中的MessageQueue想關(guān)聯(lián)晶通。
Handler的sendMessage方法,會給msg的target賦值為handler自身哟玷,然后加入MessageQueue中狮辽。
二. Looper主要是prepare()和loop()兩個方法
一個線程中只有一個Looper實例
looper方法必須在prepare方法之后運行。
Looper主要作用:
1巢寡、 與當前線程綁定喉脖,保證一個線程只會有一個Looper實例,同時一個Looper實例也只有一個MessageQueue讼渊。
2动看、 loop()方法,不斷從MessageQueue中去取消息爪幻,交給消息的target屬性的dispatchMessage去處理菱皆。好了须误,我們的異步消息處理線程已經(jīng)有了消息隊列(MessageQueue),也有了在無限循環(huán)體中取出消息的哥們仇轻,現(xiàn)在缺的就是發(fā)送消息的對象了京痢,于是乎:Handler登場了。
那么在子線程中可以使用handler嘛篷店?可以祭椰!
class CustomThread extends Thread{
@Override
public void run() {
//建立消息循環(huán)的步驟
Looper.prepare();//1、初始化Looper
mHandler = new Handler(){//2疲陕、綁定handler到CustomThread實例的Looper對象
public void handleMessage (Message msg) {//3方淤、定義處理消息的方法
switch(msg.what) {
case MSG_HELLO:
Log.d("Test", "CustomThread receive msg:" + (String) msg.obj);
}
}
};
Looper.loop();//4、啟動消息循環(huán)
}
}
}