android的消息机制主要指的是handler的运行机制,handler的主要作用是将一个任务切换到某个指定的线程中去执行,handler的运行需要底层的MessageQueue和Looper的支撑。
MessageQueue负责存储消息列表,不处理消息,消息的处理由Looper负责。Looper会无限循环的从MessageQueue中查看是否有新消息,如果有就立即处理,否则就会阻塞在那里。
在创建handler的时候必须要绑定一个Looper,没有Looper的话就会报错。可以调用Looper.prepare()(创建当前线程的Looper)或者Looper.getMainLooper()(主线程的Looper)方法创建Looper。
所以不管handler在哪发送消息,Looper处理消息时都是在Looper自己所在的线程,这样就实现了线程间通信。
Looper是通过ThreadLocal实现的。