Handler基础理论知识

126 阅读1分钟

简介

在Android开发中,我们经常需要在工作线程中进行夸线程通讯实现UI操作,这时就会使用到Handler。

Handler、Looper、MessageQueue、Message关系介绍

  • Handler Handler是跨线程通讯的媒介。可以通过Handler实现Message发送与消费Meesage等操作。
  • Looper Looper是个无限循环的滚轮,不断地从MessageQueue中取出Message,并派发给Handler。
  • MessageQueue MessageQueue是消息队列,主要用于消息入队与出队操作
  • Message Message是消息主体,携带消息内容。

工作流程

  1. 在主UI线程启动的时候,系统就创建了UI线程Looper对象。Looper内包含了MessageQueue,在创建Looper时就会创建MessageQueue。
  2. 创建Handler时会获取当前线程的Looper对象,Handler可以发送Message到MessageQueue
  3. Looper不断的从MessageQueue中取出Message并派发给对应的Handler,Handler收到消息并执行对应的业务代码逻辑,这就完成了消息的消费

特性

  • Looper具有唯一性 ThreadLocal是用于保存线程信息的一个类,在Looper创建的时候会从ThreadLocal获取线程的Looper,如果不为空就会抛出异常,这样就保证了Looper的唯一性。 image.png

Q&A

  1. Handler中发送消息线程安全吗? 线程安全。

  2. 为什么消息循环不会卡死 .....

  3. obtainMessage与new Message的区别: obtainMessage()会从消息池中获取到Message,重复new Message效率低。