笔记要点
- 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();