`
闫老三
  • 浏览: 102716 次
社区版块
存档分类
最新评论

Android 的消息队列模型

 
阅读更多

Android是参考Windows的消息循环机制来实现Android自身的消息循环的。 

Android通过Looper、Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都可以有自己的消息队列和消息循环)。 
Android系统中,Looper负责管理线程的消息队列和消息循环。我们可以通过Loop.myLooper()得到当前线程的Looper对象,通过Loop.getMainLooper()可以获得当前进程的主线程的Looper对象。 
一个线程可以存在(当然也可以不存在)一个消息队列和一个消息循环(Looper)。 
Activity是一个UI线程,运行于主线程中,Android系统在启动的时候会为Activity创建一个消息队列和消息循环(Looper)。 
Handler的作用是把消息加入特定的(Looper)消息队列中,并分发和处理该消息队列中的消息。构造Handler的时候可以指定一个Looper对象,如果不指定则利用当前线程的Looper创建。 
Activity、Looper、Handler,Thread的关系如下图所示:

image

一个Activity中可以创建多个工作线程或者其他的组件,如果这些线程或者组件把他们的消息放入Activity的主线程消息队列,那么该消息就会在主线程中处理了。

因为主线程一般负责界面的更新操作,并且Android系统中的widget不是线程安全的,所以这种方式可以很好的实现Android界面更新。在Android系统中这种方式有着广泛的运用。

那么一个线程怎样把消息放入主线程的消息队列呢?答案是通过Handle对象,只要Handler对象以主线程的Looper创建,那么调用Handler的sendMessage等接口,将会把消息放入队列都将是放入主线程的消息队列。并且将会在Handler主线程中调用该handler的handleMessage接口来处理消息。

更多Android消息队列的信息请参看: http://my.unix-center.net/~Simon_fu/?p=652

下面这个图从另外一个角度描述了他们的关系:

image

参考资料:

Android异步加载图像小结 
http://blog.csdn.net/sgl870927/archive/2011/03/29/6285535.aspx

深入理解Android消息处理系统——Looper、Handler、Thread

http://my.unix-center.net/~Simon_fu/?p=652

Android线程模型(Painless Threading) 
http://android.group.iteye.com/group/blog/382683

android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime) 
http://lepeng.net/blogger/?p=21

Android – Multithreading in a UI environment 
http://www.aviyehuda.com/2010/12/android-multithreading-in-a-ui-environment/

Android中的Handler, Looper, MessageQueue和Thread 
http://www.cnblogs.com/xirihanlin/archive/2011/04/11/2012746.html

Android Runnable 
http://blog.csdn.net/michaelpp/archive/2010/06/30/5704682.aspx

 

原文地址 http://www.cnblogs.com/ghj1976/archive/2011/05/06/2038469.html

分享到:
评论

相关推荐

    Android 消息队列模型详解及实例

    Android 消息队列模型详解及实例 Android系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列(Message Queue)和一个消息循环(Looper)。Android中除了UI线程(主线程...

    android,Mqtt消息队列,接收发送消息

    以下是对`android,Mqtt消息队列,接收发送消息`这一主题的详细解释: 1. **MQTT协议原理**:MQTT是基于发布/订阅模型的,其中客户端可以作为发布者(发送消息)或订阅者(接收消息)。消息通过主题进行路由,每个...

    Android消息机制

    Android的消息系统包含五个基本要素:消息队列(MessageQueue)、发送消息(Message)、消息读取(Looper)、消息分发(Handler)和消息循环线程。消息循环系统依赖于消息循环来不断地轮询消息队列,如果有新的消息,则调用...

    Linux进程间通信之消息队列

    本教程将深入探讨Linux进程间通信中的消息队列,并通过一个基础模型来阐述其工作原理。 消息队列是一种异步通信方法,允许进程发送和接收特定长度的消息,这些消息会被存储在内核维护的队列中,直到被接收方读取。...

    Android单线程模型中Message、Handler、Message Queue、Looper之间的关系---附实例源码

    消息的类型,在Handler类中的handleMessage方法中得到单个的消息进行处理,在单线程模型下,为了线程通信问题,Android设计了一个Message Queue(消息队列), 线程间可以通过该Message Queue并结合Handler和Looper组件...

    android多线程模型和service分析

    Android的线程模型围绕主线程构建,主线程维护了一个消息队列,不断从队列中取出消息进行处理。当队列为空时,主线程处于等待状态,直到有新消息加入队列。 为了实现多线程间的通信,Android提供了`Handler`机制。`...

    java队列

    6. **生产者-消费者模型**:队列常被用作生产者-消费者问题的解决方案,其中生产者线程将数据放入队列,而消费者线程则从队列中取出数据。`BlockingQueue`在这类场景下非常有用。 7. **JMS(Java Message Service)...

    Android核心分析 之十一-------Android GWES之消息系统.doc

    在这个模型中,应用程序不断地检查其消息队列,一旦有新消息到来,就根据消息类型和参数调用相应的处理函数。为了优化资源管理,通常会引入旗语机制,使消息消费者线程在无消息时进入等待状态,只有当有新消息到达时...

    android 线程之间通过Handler发送消息

    首先,理解Android线程模型至关重要。Android应用的主要工作线程被称为UI线程或主线程,它负责处理用户界面的更新和事件响应。后台线程通常用于执行耗时任务,避免阻塞UI线程。为了在后台线程和主线程之间交换数据和...

    Android 消息处理机制原理 - 简书1

    在Android系统中,由于UI线程是单线程模型,所有的界面更新操作必须在主线程中执行,因此,当需要在子线程中处理耗时任务后更新UI时,就需要借助消息机制来实现。 Android的消息机制主要由四个组件构成:Handler...

    Android系统Surface机制的SurfaceFlinger服务的线程模型分析.doc

    Binder线程接收来自Android应用进程的渲染请求,将这些请求转化为消息放入UI渲染线程的消息队列中,唤醒渲染线程进行处理。 UI渲染线程是SurfaceFlinger服务的核心,它独立于System进程的主线程运行,主要任务是...

    Android消息处理机制之Message 二

    总结一下,Android的消息处理机制是一个高效的异步通信模型,Message的`obtain()`方法和`sendMessage()`方法是其关键组成部分。理解这些概念并熟练运用,能够帮助开发者编写出更加流畅、响应快速的Android应用程序。...

    Android消息机制[收集].pdf

    Android的消息机制是Android系统中用于线程间通信和异步处理的重要组成部分,它涉及到四个主要的角色:Looper、Handler、Message和Message Queue。下面将详细解释这些概念及其相互关系。 1. Looper: Looper是一个...

    NIO加线程池实现Android消息推送

    在Android应用开发中,消息推送是一项关键功能,它能让服务器实时地向客户端发送通知或数据。本项目"**NIO加线程池实现Android消息推送**"旨在通过Java NIO和线程池技术构建一个高效的推送系统,尤其适用于服务器...

    android 多线程 looper handler

    在 Android 中,Looper 是一个消息队列的管理者,它可以将消息添加到队列中,并且可以处理消息。在有 Looper 的线程中,我们可以使用 Handler 来发送和处理消息。Handler 是一个抽象的概念,它可以将消息发送到 ...

    Android系统Surface机制的SurfaceFlinger服务的线程模型分析报告.doc

    UI渲染线程的运行模型\nUI渲染线程使用消息队列机制,当队列为空时,线程会进入睡眠状态等待。当收到其他进程(如应用程序)通过Binder发送的渲染请求,或控制台事件监控线程发现硬件帧缓冲区状态变化时,都会向UI...

    Android中消息机制

    在Android开发中,消息机制是非常重要的组成部分,尤其考虑到Android的单线程模型,理解如何高效地进行线程间通信至关重要。以下是对该机制中关键角色及其作用的详细说明。 **1. Looper** - **简介**:Looper负责...

    基于Android移动设备传感器的研究与应用.pdf

    在讨论消息队列时,作者指出Android应用程序依赖消息驱动模型工作,消息队列是其中的核心。消息队列负责接收事件源的消息,按执行时间排序并分发给消息处理循环进行处理。这种机制确保了应用程序的响应性和效率。 ...

Global site tag (gtag.js) - Google Analytics