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

  • 消息是以链表的形式出现的
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014529755/article/details/71750791

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

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

Android消息机制(Handler、MessageQueue、Looper)详细介绍

Android的消息机制其实在android的开发过程中指的也就是Handler的运行机制,这也就引出了android中常见的面试问题: 简述Handler、Looper、MessageQueue的含...
  • u011619211
  • u011619211
  • 2016-05-18 11:01:18
  • 3768

进程间通信(IPC):消息队列(Message Queue)

消息队列与命名管道有许多相似之处,但少了在打开和关闭管道方面的复杂性。与命名管道相比,消息队列的优势在于,它独立于发送和接收进程而存在。 消息队列函数的定义如下所示: #include in...
  • lijiajia81
  • lijiajia81
  • 2013-01-26 14:18:52
  • 2832

Android 进阶14:源码解读 Android 消息机制( Message MessageQueue Handler Looper)

不要心急,一点一点的进步才是最靠谱的。 读完本文你将了解: 前言 Message 如何获取一个消息 Message.obtain() 消息的回收利用 MessageQueue Mes...
  • u011240877
  • u011240877
  • 2017-06-06 23:59:50
  • 4581

Android MessageQueue源码分析

MessageQueue是Android消息机制的核心,熟悉MessageQueue能够帮助我们更清楚详细地理解Android的消息机制。这篇文章会介绍MessageQueue消息的插入(enqueu...
  • xxx_zhi
  • xxx_zhi
  • 2016-10-17 00:27:53
  • 1301

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

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

【Android自助餐】Handler消息机制完全解析(二)MessageQueue的队列管理

Android自助餐Handler消息机制完全解析(二)MessageQueue的队列管理[toc] 关于这个队列先说明一点,该队列的实现既非Collection的子类,亦非Map的子类,而是Mes...
  • xmh19936688
  • xmh19936688
  • 2016-07-13 20:51:01
  • 10257

Android MessageQueue消息循环处理机制

【从源码看Android】03Android MessageQueue消息循环处理机制(epoll实现)
  • yuerliang
  • yuerliang
  • 2014-04-14 11:11:48
  • 832

深入理解MessageQueue

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

深入源码解析Android中的Handler,Message,MessageQueue,Looper

本文主要是对Handler和消息循环的实现原理进行源码分析,通过分析源码的方式去探索Thread、MessageQueue、Looper、Message以及Handler的实现原理,并最终通过一张图的...
  • sunqunsunqun
  • sunqunsunqun
  • 2015-08-01 02:20:53
  • 17566
收藏助手
不良信息举报
您举报文章:Android笔记二(MessageQueue && Message)
举报原因:
原因补充:

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