概述
在Android开发的多线程应用场景中,Handler机制十分常用,以前陆陆续续了解过,没系统的学习,现在系统的学习一下。
参考大神文章:https://www.jianshu.com/p/f0b23ee5a922
是什么?
Handler是一套Android的消息传递机制。
作用
在多线程的应用场景中,将工作线程中需更新UI
的操作信息传递到 UI
主线程,从而实现工作线程对UI
的更新处理,最终实现异步消息的处理。
为什么要用Handler
多个线程并发更新UI的同时 保证线程安全
相关概念
主要涉及 Handler
、Message
、Message Queue
、Looper
工作原理解析
1、工作流程
Handler
机制的工作流程主要包括4个步骤:
- 异步通信准备
- 消息发送
- 消息循环
- 消息处理
具体如下图:
线程阻塞含义:
MessageQueue的主要方法next和enqueueMessage,其中next方法在队列为空或者消息暂未达到处理时间的时候,线程会阻塞,这里的阻塞是通过native层的epoll方式进行的阻塞。enqueueMessage方法在添加Message的同时也会判断是否需要唤醒线程,若是需要则在native层通过对文件的写入数据而触发epoll设置的事件监听,因此唤醒线程。
2、流程图
3、示意图
4、注意点
线程(Thread)
、循环器(Looper)
、处理者(Handler)
之间的对应关系如下:
- 1个线程
(Thread)
只能绑定 1个循环器(Looper)
,但可以有多个处理者(Handler)
- 1个循环器
(Looper)
可绑定多个处理者(Handler)
- 1个处理者
(Handler)
只能绑定1个1个循环器(Looper)