Android的Handler消息传递机制

周期性变化的事件

Android中的Handler消息传递机制:子线程与主线程协同工作的桥梁

  • 子线程通过Handler发送消息,主线程收到消息后,负责页面的更改

  • Android规定:所有对界面的操作只放在主线程(界面控件非线程安全)

Handler类

  • 用于发送、接收、处理消息

  • 执行过程:

    • 子线程中,有对界面操作需求时,通过Handler发送消息

    • Hanlder接收消息:系统自动调用handleMessage方法(回调方法)

    • handleMessage方法处于主线程中

    • > 发送消息和处理消息都是同一个Handler

      所以说:谁发送谁处理

开发步骤

  1. 继承了Handler类 & 创建了子类对象,重写handleMessage()方法
  2. 新启动的线程中,调用Handler对象的发送消息方法sendMessage(消息对象)
  3. 利用Handler对象的handleMessage()方法接收消息,然后根据不同消息执行不同操作

或调用Handler对象的post方法,传入新线程对象,重写run方法,指定操作UI内容

要点:一个Activity1 ⇔线程 ⇔ 1 Looper ⇔ 1 MessageQueue ⇔ n Handler(绑定handlemessage) ⇔ m Message

Message -> Handler ( 发送sendmessage ) -> MessageQueue ( 存储 ) -> Looper ( 轮询 ) -> Handler ( 执行handlemessage )

发送-接收-分发-处理
handler sendMessage-->looper轮询读取和分发-->handler的回调处理

Android异步通信:Handler机制学习攻略

Android异步通信:图文解析 Handler通信机制的工作原理

Handler 的通信机制的背后的原理是什么

Handler在多线程中使用(生产者消费者模型)

多-1-多模型

模块 线程
生产者 子线程handler.sendmessage
消费者 主线程 looper & handler.handlemessage
中介 主线程 messageQueue

小结:

  • 主线程和子线程通信依靠1个全局变量messagequeue
    • handler作为全局变量,负责在子线程发送,主线程处理
    • looper和messagequeue绑定。使用looper 初始化handler,handler和looper绑定
  • Handler和looper绑定:创建handler,构造函数要传入Looper。主线程创建handler,默认使用主线程looper,不需要显式传入.
  • Handler创建和handlemessage(handler处理)在一个线程
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容