安卓的主线程不能搞耗时操作,子线程不能更新ui ;如果子线程要改变ui,就要通知主线程去改, Handler就是这种传递消息的机制
Handler对象
handler
: 负责 Message 的发送及处理。主要向消息池发送各种消息事件(Handler.sendMessage())
和处理相应消息事件(Handler.handleMessage())
,按照先进先出执行,内部使用的是单链表的结构。
Message:
需要被传递的消息
MessageQueue:
负责消息的存储与管理,负责管理由 Handler
发送过来的 Message
。读取会自动删除消息,单链表维护,插入和删除上有优势。在其 next()
方法中会无限循环,不断判断是否有消息,有就返回这条消息并移除
Looper:
负责关联线程以及消息的分发,在该线程下从 MessageQueue
获取 Message
,分发给Handler
,Looper
创建的时候会创建一个MessageQueue
,调用 loop()方法的时候消息循环开始,其中会不断调用 messageQueue
的 next()
方法,当有消息就处理,否则阻塞在 messageQueue
的next()
方法中。当 Looper
的 quit()
被调用的时候会调用messageQueue
的 quit()
,此时 next()
会返回 null,然后 loop()
方法也就跟着退出