Android笔记二(MessageQueue && Message)

原创 2017年05月13日 23:29:45

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这个流程

  • 消息是以链表的形式出现的
版权声明:本文为博主原创文章,未经博主允许不得转载。

MessageQueue&Message Pool—消息的读写、删除和回收

1、MessageQueue的数据结构 翻译为消息队列,但实际的数据结构是单向链表结构,下文中仍以消息队列称之; Message中有个重要的属性Message next;next指向另外一个Messa...
  • u012164786
  • u012164786
  • 2016年06月12日 02:50
  • 1095

深入Android的消息机制源码详解~Handler,MessageQueue与Looper关系

一说到Android的消息机制,自然就会联想到Handler,我们知道Handler是Android消息机制的上层接口,因此我们在开发过程中也只需要和Handler交互即可,很多人认为Handler的...
  • javazejian
  • javazejian
  • 2016年03月04日 23:25
  • 1898

Android消息机制---MessageQueue的工作原理

在Android中MessageQueue主要包含两个操作:插入和读取。读取操作本身会伴随着删除操作,插入和读取对应的方法分别是enqueueMessage()和next(),其中enqueueMes...
  • u012810020
  • u012810020
  • 2016年06月23日 15:36
  • 2323

深入理解MessageQueue

Android 中有两个非常重要的知识点,分别是Binder机制和Handler机制。前者用于跨进程通讯,并且通过 ServiceManager 给上层应用提供了大量的服务,而后者用于进程内部通讯,以...
  • kisty_yao
  • kisty_yao
  • 2017年05月05日 09:32
  • 1743

Handler的实现原理及其与Message、MessageQueue关系详解

在Android中为我们提供了一个主线程和子线程之间的通信机制,这种机制就是利用Handler、Message、Looper和MessageQueue来彼此联系起来的。那么为什么要提供这么一种机制呢?...
  • u012481172
  • u012481172
  • 2015年08月13日 15:39
  • 1254

消息队列(Message Queue)简介及其使用

消息队列(Message Queue)简介及其使用     利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进...
  • xjbclz
  • xjbclz
  • 2016年07月04日 22:25
  • 2898

Android的Message Pool是个什么鬼,Message Pool会否引起OOM——源码角度分析

Android中,我们在线程之间通信传递通常采用Android的消息机制,而这机制传递的正是Message。通常,我们使用Message.obtain()和Handler.obtainMessage(...
  • xplee0576
  • xplee0576
  • 2015年07月14日 11:38
  • 1354

Android message 消息机制介绍及使用 /*自己编写*/

在Android程序运行中,线程之间或者线程内部进行信息交互时经常会使用到消息,如果我们熟悉这些基础的东西及其内部的原理,将会使我们的Android开发变的容易、可以更好地架构系统。在学习Androi...
  • phenixyf
  • phenixyf
  • 2016年07月21日 22:21
  • 547

message Queue 来实现低耦合设计 PHP

读篇东西 通过 message Queue 来实现低耦合设计 那什么是消息队列呢? 在 linux 下就是进程通信了。 关于Linux系统进程通信的概念及实现可查看: http://w...
  • wide288
  • wide288
  • 2014年09月30日 11:47
  • 960

深入理解MessageQueue

Android 中有两个非常重要的知识点,分别是Binder机制和Handler机制。前者用于跨进程通讯,并且通过 ServiceManager 给上层应用提供了大量的服务,而后者用于进程内部通讯,以...
  • qq_24531461
  • qq_24531461
  • 2017年06月09日 22:11
  • 163
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android笔记二(MessageQueue && Message)
举报原因:
原因补充:

(最多只允许输入30个字)