文章摘要:

本文主要描述了基于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 - 存放整型数据