一、了解Handler之前,要先知道下面的几个概念
- Message:线程间通讯的数据单元。线程间通讯,发送的就是message,这里面存储了你要发送的消息内容。
- MessageQueue:消息队列,用来存放通过Handler发布的消息,按照先进先出执行。
- Handler:Message的主要处理者,负责将Message添加到消息队列以及对消息队列中的Message进行处理。
- Looper:循环器,扮演Message Queue和Handler之间桥梁的角色,循环取出Message Queue里面的Message,并交付给相应的Handler进行处理。
- 线程和这几个概念之间的关系:
①UI线程初始化Handler的时候,会创建一个Looper,这个Looper和UI线程对应;
②Looper初始化的时候会创建一个消息队列MessageQueue。
也就是说主线程、Looper、MessageQueue这三者是一一对应的,而且都是唯一的。一个APP,有一个主线程,这个主线程有一个Looper,这个Looper有一个对应的MessageQueue。但是这个主线程中可以有多个Handler对象。
二、来看一下Handler通信的过程,也就是原理
原理:Handler创建一个Message消息→通过获取的主线程Looper将Message加入到MessageQueue中去→Looper循环查询MessageQueue是否有新消息,如果没有就阻塞,如果有就传递给创建消息的Handler来处理。
总结一下:Handler负责发送和处理消息;Looper负责接收Handler发送的消息,并把消息回传给Handler自己;MessageQueue就是一个消息容器。