Handler消息机制原理


Android提供了handler 和looper 来满足线程之间的通信。

Handler先进先出原则。

Looper类用来 管理特定线程内对象之间的消息交换

 

1.   looper:一个线程可以产生一个looper 对象,由它来管理此线程里的消息队列Message Queue,是消息队列和handler之间的桥梁

2.   handler:可以构造handler对象与looper沟通,以便push新消息到消息队列中;或者接收looper从消息队列取出所送来的消息

3.   消息队列:用于存放线程放入的消息。

4.   线程:通常就是主线程,而android启动程序 时会建立一个消息队列。每个线程里可含有一个Looper对象以及一个MessageQueue数据结构。在应用程序里,可以定义Handler的子类别来接收Looper所送出的消息。

 

一.Handler创建 消息

Handler创建消息时首先查询消息池中是否有消息存在,如果有直接从消息池中取得,如果没有则重新初始化一个消息实例。

消息池的优点:可提供下次handler创建消息时使用。提高了消息对象的复用,减少系统垃圾的次数

                 消息创建流程图:

 

二.Handler发送消息

主线程初始化第一个handler时会创建一个looper,该looper与主线程一一对应。(每个线程只创建一个looper)。然后其他 handler初始化时直接获取 第一个handler创建 的looper。而looper初始化时会创建 一个消息队列

      Handler、Looper、MessageQueue的初始化流程如图

Handler有对主线程消息队列和消息循环looper的引用,子线程可以通过 handler将消息发送到主线程的消息队列中

 

三.Handler处理消息

主线程通过 looper循环查询消息队列,当发现有消息存在时会从消息队列中取出。通过消息的参数判断该消息对应的handler,然后将消息分发到指定的handler进行处理

           子线程通过 handler,looper与主线程通信的流程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值