[Android] 线程间交互

学习Android的线程交互,要掌握Thread, Looper, MessageQueue和Handler这四个概念。
1. Thread代表线程,不是每个Thread都有Looper,但Looper必须附在一个线程上。
2. Looper内部维护一个MessageQueue,即消息队列。
3. 每个MessageQueue中有一个Handler,Handler对象用来发送消息到MessageQueue中,或接收Looper(从MessageQueue中)送来的消息。

获取Looper对象的引用:

Looper looper = Looper.myLooper();

为了与Looper进行沟通,我们需要构建一个Handler的子类,这里我们将其命名为EventHandler。
EventHandler负责MessageQueue的存取工作。
籍由EventHandler,我们可以发送消息给Looper,然后放入其MessageQueue中。

class EventHandler extends Handler {
    public EventHandler(Looper looper) {
        super(looper);
    }
    @override
    public void handleMessage(Message msg) {       // 处理收到的Message
        textView.setText((String) msg.obj);
    }
}

发送一个message:

EventHandler handler = new EventHandler(looper);
handler.removeMessages();     // 清除MessageQueue中的事件
String str = "Hello, message.";
Message msg = handler.obtainMessage(1, 1, 1, str);    // 组装一个事件
handler.sendMessage(msg);     // 发送事件

在别的线程里,若要向主线程发送Message,可用如下方法获取主线程的Looper对象引用:

Looper mainLooper = Looper.getMainLooper();
// 接下来获取Handler,发送Message的代码和之前一样

 


posted @ 2012-05-04 16:50  linear  阅读(504)  评论(0编辑  收藏  举报