筆記要點
- Handler主要用于非UI線程中對UI進行更新;
- 每個線程中都會對應一個Looper對象,Looper用于管理消息隊列,其可以和handler進行交互。默認情況下,主線程(UI)是自動開啟了Looper的,非主線程需要手動開啟;
- Handler有兩種用法:寫在主線程中、寫在子線程中。
1、寫在主線程中
Handler myHandler = new Handler() {
//處理消息
public void handleMessage(Message msg) {
}
}
子線程中調用
@Override
public void run() {
myHandler.sendEmptyMessage(0x123);
}
2、寫在子線程中
在子線程中要手動開啟Looper,Looper.prepare()和Looper.loop()分別用于創建和開啟。
class mThread extends Thread
{
public Handler mHandler;
public void run()
{
Looper.prepare();
mHandler = new Handler()
{
// 定義處理消息的方法
@Override
public void handleMessage(Message msg)
{
}
};
Looper.loop();
}
}
主線程中調用
mThread mt = new mThread ();
mt.mHandler.sendMessage();