有几个概念需要认识清楚:Thread Looper Handler这几个概念实际上都是面对消息队列来完成的
Looper实际上就是维护一个MessageQueue
在Handler初始化的时候把Looper所维护的消息队列交给Handler
我们看下面的代码:
/**
* Use the provided queue instead of the default one.
*/
public Handler(Looper looper) {
mLooper = looper;
mQueue = looper.mQueue;
mCallback = null;
}
这个很能说明问题
一般来说一个线程对应一个Looper也就是维护一个消息队列
然后通过Handler进行消息的发送接收,同时Handler本身实现具体的handleMessage来处理具体的事情
一般来说一个app的在创建之初会自动建立一个Looper对应的消息队列也就自动建立
线程A的Message Queue里的消息,只有线程A对象可以处理。
使用Looper.myLooper可以取得当前线程的Looper对象handler = new EevntHandler(Looper.myLooper());
handler = new EevntHandler(Looper.getMainLooper())
第一个是构造线程的handler 第二个是构造main UI的handler
下面看一个简单的例子:
<pre>
* class LooperThread extends Thread {
* public Handler mHandler;
*
* public void run() {
* Looper.prepare();
*
* mHandler = new Handler() {
* public void handleMessage(Message msg) {
* // process incoming messages here
* }
* };
*
* Looper.loop();
* }
* }</pre>