面试题:阐述Handler的实现原理

处理过程

从handler获取一个消息对象,把数据封装到这个消息对象中,通过handler的send...方法把消息push到MessageQueue队列中。
Looper对象会轮询这个MeaaageQueue队列,把消息对象取出。
通过dispatchMessage分发给Handler,在回调用Handler实现的handlerMessage方法处理消息。

流程图
流程图.png

1、Handler本身:负责消息的发送和处理
2、Message:消息对象
3、MessageQueue:消息队列(用于存放消息对象的数据结构)
4、Looper:消息队列的处理者(用于轮询消息队列的消息对象,取出后回调handler的dispatchMessage进行消息的分发,dispatchMessage方法会回调handleMessage方法把消息传入,由Handler的实现类来处理)

Message对象的内部实现是链表,最大长度是50,用于缓存消息对象,达到重复利用消息对象的目的,以减少消息对象的创建,所以通常我们要使用obtainMessage方法来获取消息对象

安全:Handler的消息处理机制是线程安全的

关系:创建Handler时会创建Looper,Looper对象的创建又创建了MessageQueue

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将手把手带你深入分析Handle...
    BrotherChen阅读 488评论 0 0
  • 文章独家授权公众号:码个蛋更多分享:http://www.cherylgood.cn 谈到Android开发,就离...
    Angels_安杰阅读 1,655评论 0 3
  • 对于handler,我想我就不用废话了,开发必不可少,面试必定会问,可真的能够对handler深入掌握么?又能在面...
    葛糖糖阅读 1,282评论 5 5
  • 一、提出问题 面试时常被问到的问题: 简述 Android 消息机制 Android 中 Handler,Loop...
    Marker_Sky阅读 2,311评论 0 18
  • 1. 前言 在之前的图解Handler原理最后留下了几个课后题,如果还没看过那篇文章的,建议先看那篇文章,课后题如...
    唐江旭阅读 6,022评论 5 45