Handler机制大体分为四部分实现:
1,Handler
2, Looper
3, MessageQueue
4, Message
Handler依赖Looper,Handler中可以指定Looper,若没有指定则会创建一个默认的Looper.这个Looper在loop()函数中会调用Handler中的dispatchMessage(),在这个函数中会调用子类可以用的handleMessage(msg),交给子类自己处理。
Handler创建后会有一个Looper,也就可以获得Looper中遍历的MessageQueue对象,所以通过handler发出的Message,无论是sendMessageAtTime,或是sendMessageAtFrontOfQueue(),还是sendMessageDelayed()都是使用MessageQueue.enqueueMessage()加入到序列中的。
<----------------------------------------------------------------------->
Looper中有一个ThreadLocal,调用Looper.prepare()来保存当前的UI线程,也就是主线程。代码如下:
还有一个MessageQueue,通过Looper.loop()函数来循环MessageQueue中的Message,
Message msg = queue.next(); //这个类似Cursor,Iterator都是有一个指针,然后获得一个Message.
msg.target.dispatchMessage(msg); //msg.target 其实是调用这个Looper的Handler.
msg.recycle();//回收
<------------------------------------>
MessageQueue:消息队列
Message:消息 实现了Parcelable。每一个target属性就是一个Handler
<------------------------------------------->
其实机制挺简单,欢迎各位指评。