Android面试集合

Android的消息机制-Handler(管理者)

2018-10-09  本文已影响2人  光锥外

什么是Handler ?

Handler是Android消息机制的上层接口,平时使用起来很方便,我们可以通过它把一个任务切换到Handler所在的线程中去运行。而最常用的就是拿来从子线程切换到主线程以便更新UI。
handler通过发送和处理Message和Runnable对象来关联相对应线程的MessageQueue(消息队列)
1.可以让对应的Message和Runnable在未来的某个时间点进行相应处理
2.让自己想要处理的耗时操作放在子线程,让更新UI的操作放在主线程

毋庸置疑,Handler的作用基本可以用一句概括“获取数据配合主线程更新UI”

处理过程:

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

流程图:

handler原理.png

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读