1:形象描述一下Handler的原理。
Handler:快递员(属于某个快递公司的职员)
Message:包裹(可以放置很多东西的箱子)
MessageQueue:快递分拣中心(分拣快递的传送带)
Looper:快递公司(具有处理包裹去向的管理中心)
2:Looper 不断的从 MessageQueue 中取出 Message 交给 Handler 来处理.
每个 Thread 对应一个 Looper, 每一个 Looper 只对应一个 MessageQueue,
每一个 MessageQueue 中有N个 Message, 每个 Message 只能定义一个 Handler 来处理。
3: Handler 有两个职责: 处理 Message和 把 Message 放入 MessageQueue 消息队列中去。
将一个 Message 放入消息队列有两种方法 post和send方法,
post(Runnable r) 和 sendMessageAtTime(Message msg, long time)区别
Looper 职责是从 MessageQueue 取出 Message 调用 Handler.dispatchMessage进行消息派发, 派发给 Handler.
MessageQueue 是一个消息队列, 是队列就会有新建队列, 元素入队,元素出队,函数元素等,
enqueMessage入队, next出队, removeMessages删除元素.
重点看一下 Looper, Looper 为什么能不停的循环取 Message 呢?
Loop.java
public static void loop() {
final Looper me = myLooper();
final MessageQueue queue = me.mQueue;
for (;;) {
Message msg = queue.next();
}
}
loop()为什么不会导致系统死机, 因为Looper在 Ui 主线程中运行, Ui主线程需要一直运行下去必须循环。。