Handler通信机制原理学习

概述

在Android开发的多线程应用场景中,Handler机制十分常用,以前陆陆续续了解过,没系统的学习,现在系统的学习一下。

参考大神文章https://www.jianshu.com/p/f0b23ee5a922

是什么?

Handler是一套Android的消息传递机制。

作用

在多线程的应用场景中,将工作线程中需更新UI的操作信息传递到 UI 主线程,从而实现工作线程对UI的更新处理,最终实现异步消息的处理。

为什么要用Handler

多个线程并发更新UI的同时 保证线程安全

相关概念

主要涉及 HandlerMessageMessage QueueLooper

工作原理解析
1、工作流程

Handler机制的工作流程主要包括4个步骤:

  1. 异步通信准备
  2. 消息发送
  3. 消息循环
  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)

0%