Android笔记二(MessageQueue && Message)

MessageQueue

对于这个类,开始时,我们需要注意到google源码对其的注释说明:
这里写图片描述
消息是通过Handler以及Looper添加到Messagequeue消息队列中去的。我们可以通过new Looper()构造方法在当前线程中创建一个消息队列。也就是说创建Looper的时候就会创建相应的消息队列。既然消息队列最重要的作用就是对消息的处理,下面重点了解下两个方法

  • enqueueMessage()
  • next()

enqueueMessage()方法最终是通过Handler的sendMessageAtTime被调用的。也就是说,每次Handler发送一条消息的时候,都会将一条消息推到消息队列MessageQueue中去。进入这个方法,我们会看到先对msg.target进行判断,target是何物?我们在new这个消息的时候就会已经对其赋值了,target = this(Handler),也就是将这个消息推进消息队列的Handler本身。如图所示将消息添加到队列中
这里写图片描述
这里写图片描述

next()方法中主要是完成消息的读取,每次都会读取队列头部的消息Header,该方法是在Looper类中的loop()方法中被调用,Android笔记1有提到调用的流程,现在剖析下next方法具体干了啥事儿。
这里写图片描述

我们一直只知道消息通过Looper循环进来出去,真正的流程就是这些,在next方法中从管道获取消息(这儿可能会产生block),在dispatchMessage中处理消息,在enqueueMessage中又将消息发送至管道中,其中后两步是在调用Handler的方法完成的,这样在Looper的loop()方法中一直走next–>enqueueMessage这个流程

  • 消息是以链表的形式出现的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值