Handler

安卓的主线程不能搞耗时操作,子线程不能更新ui ;如果子线程要改变ui,就要通知主线程去改, Handler就是这种传递消息的机制

Handler对象

handler: 负责 Message 的发送及处理。主要向消息池发送各种消息事件(Handler.sendMessage())和处理相应消息事件(Handler.handleMessage()),按照先进先出执行,内部使用的是单链表的结构。

Message:需要被传递的消息

MessageQueue:负责消息的存储与管理,负责管理由 Handler 发送过来的 Message。读取会自动删除消息,单链表维护,插入和删除上有优势。在其 next()方法中会无限循环,不断判断是否有消息,有就返回这条消息并移除

Looper:负责关联线程以及消息的分发,在该线程下从 MessageQueue 获取 Message,分发给Handler,Looper 创建的时候会创建一个MessageQueue,调用 loop()方法的时候消息循环开始,其中会不断调用 messageQueuenext()方法,当有消息就处理,否则阻塞在 messageQueuenext()方法中。当 Looperquit()被调用的时候会调用messageQueuequit(),此时 next()会返回 null,然后 loop()方法也就跟着退出

实现流程

图片来源Android 异步通信:图文详解Handler机制工作原理