Andorid应用--线程间通信
文章摘要:
本文主要描述了基于android的线程间通信。
1.Looper
Looper对象用来为线程开启一个消息循环,一个线程对应一个Looper,一个Looper可以对应多个消息队列;
默认情况下Andorid中除了主线程外创建的线程是没有开启的消息循环的,如果在非主线程中创建Handler对象,首先要使用Looper类的prepare()方法来实始化,然后才能创建Handler对象,再使用loop()方法来启动Looper,从消息队列里获取和处理消息。
示例:
Handler handle1;
@Override
public void run()
{
super.run();
Looper.prepare(); // 初始化Looper对象
// 创建Handler(接收消息)
handler1 = new Handler(){
public void handleMessage(Message msg){
}
}; // 注意这里的分号
looper.loop();
}
2.消息处理类Handler
// 创建Handler(接收消息)
handler = new Handler(){
public void handleMessage(Message msg){
switch (msg.what)
{
case 0x01:
Bundle bd = msg.getData();
byte[] a = bd.getByteArray("123");
int i;
String str = "";
for(i = 0; i < msg.arg1;i++)
{
str += String.format("%02X ",a[i]);
}
show_log(str);
break;
default:
break;
}
}
}; // 注意这里的分号
3.消息类Message
// 创建并发送消息
Bundle bundle = new Bundle();
bundle.putByteArray("123",recvbuf);
Message msg = handler.obtainMessage();
msg.what = 0x01;
msg.arg1 = length;
msg.setData(bundle);
handler.sendMessage(msg)
参数说明:
what - 指定消息代码用于区分不同的消息;
arg1 - 存放整型数据
arg2 - 存放整型数据