Handler消息传递机制
程序员文章站
2022-07-14 16:43:34
...
1. Handler消息处理类
将Message或Runnable应用post()或sendMessage()发送到MessageQueue中,当MessageQueue循环到该Message时,调用相应的Handler对象的HandlerMessage()进行处理。
//创建Message,推荐第二种,从Message Pool直接提取,不浪费内存
Message msg = new Message();
Message msg = handler.obtainMessage();
/*发送Message的几种方式*/
//第一种
msg.what = 0x1;
Bundle bundle = new Bundle();
bundle.putString("key", "value");
msg.setData(bundle);
handler.sendMessage(msg);
//相应的提取
String str = msg.getData().getString("key");
//第二种
int what = 0x1;
handler.obtainMessage(what, "obj").sebdToTarget();
//提取
String str = msg.obj().toString();
//发送Runnable类
Runnable run = new Runnable(){...};
int delay = 1000;//毫秒
handler.post(run);//立即发送,run对象封装为Message对象
handler.postDelay(run, delay);//延时发送
handler.postAiTime(run, time);//定时发送
//消息处理回调
handler = new Handler() {
public void handlerMessage(Message msg) {
if (msg.what == 0x1)
...
}
};
2. 非主线程中创建Handler
需要使用Looper类的prepare()来初始化一个Looper对象
public class LooperThread extends Thread {
public Handler handler;
@Override
public void run() {
super.run();
Looper.prepare();//初始化Looper对象
handler = new Handler() {
public void handlerMessage(Message msg) {}
};
Message msg = handler.obtainMessage();
msg.what = 0x1;
handler.sendMessage(msg);
Looper.loop();//启动Looper
}
}
上一篇: Handler消息传递机制
下一篇: Handler的使用