在Android中,Looper是用來(lái)將一個(gè)線程與一個(gè)消息隊(duì)列關(guān)聯(lián)起來(lái)的類。它可以使線程能夠處理來(lái)自消息隊(duì)列的消息。
下面是一些使用Looper的步驟:
獲取當(dāng)前線程的Looper對(duì)象。在主線程中,可以使用Looper.getMainLooper()
方法來(lái)獲取主線程的Looper對(duì)象。在其他線程中,可以使用Looper.myLooper()
方法來(lái)獲取當(dāng)前線程的Looper對(duì)象。
創(chuàng)建一個(gè)Handler對(duì)象。Handler是用來(lái)發(fā)送和處理消息的類??梢栽谥骶€程中創(chuàng)建一個(gè)Handler對(duì)象,也可以在其他線程中創(chuàng)建。如果在其他線程中創(chuàng)建Handler對(duì)象,則需要在該線程中先調(diào)用Looper.prepare()
方法來(lái)為該線程創(chuàng)建Looper對(duì)象。
將Looper對(duì)象與消息隊(duì)列關(guān)聯(lián)起來(lái)。在主線程中,可以直接使用主線程的Looper對(duì)象。在其他線程中,需要先調(diào)用Looper.loop()
方法來(lái)啟動(dòng)消息循環(huán),將該線程的Looper對(duì)象與消息隊(duì)列關(guān)聯(lián)起來(lái)。
使用Handler對(duì)象發(fā)送和處理消息??梢酝ㄟ^(guò)調(diào)用Handler的sendMessage()
方法來(lái)發(fā)送消息,通過(guò)重寫(xiě)Handler的handleMessage()
方法來(lái)處理消息。
下面是一個(gè)使用Looper的例子:
// 在其他線程中使用Looper
// 在其他線程中創(chuàng)建Handler對(duì)象
Handler handler = new Handler();
// 在其他線程中調(diào)用Looper.prepare()方法創(chuàng)建Looper對(duì)象
Looper.prepare();
// 在其他線程中調(diào)用Looper.loop()方法啟動(dòng)消息循環(huán)
Looper.loop();
// 在其他線程中使用Handler對(duì)象發(fā)送和處理消息
handler.post(new Runnable() {
@Override
public void run() {
// 發(fā)送消息
handler.sendMessage(handler.obtainMessage(1, "Hello"));
// 處理消息
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 處理消息邏輯
}
};
}
});
注意,使用Looper時(shí)需要注意消息的處理不要阻塞主線程,以免導(dǎo)致ANR(Application Not Responding)錯(cuò)誤。