Android 的消息队列模型

转载 2012年03月30日 00:04:12

http://www.cnblogs.com/ghj1976/archive/2011/05/06/2038469.html


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



Handler、Loop消息队列模型,各部分的作用

Android系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列(Message Queue)和一个消息循环(Looper)。Android中除了UI线程(主...
  • johnWcheung
  • johnWcheung
  • 2017年06月04日 12:47
  • 367

分布式消息队列模型 实战

介绍 作为一种基础的抽象数据结构,队列被广泛应用在各类编程中。大数据时代对跨进程、跨机器的通讯提出了更高的要求,和以往相比,分布式队列编程的运用几乎已无处不在。但是,这种常见的基础性的事物往往容...
  • iie_libi
  • iie_libi
  • 2017年02月17日 15:23
  • 741

采用线程池和消息队列的“伪异步”I/O模型

参考:《Netty权威指南》 由于 一请求一线程 的I/O模型,在高并发时创建大量的线程,严重降低系统性能,并且容易造成线程堆栈溢出等问题。 采用线程池和消息队列的“伪异步”模型,是一种改...
  • hbtj_1216
  • hbtj_1216
  • 2016年11月10日 20:16
  • 1363

Android 的消息队列模型

Android是参考Windows的消息循环机制来实现Android自身的消息循环的。  Android通过Looper、Handler来实现消息循环机制,Android消息循环是针对线程的(每个线...
  • danming60520
  • danming60520
  • 2013年08月26日 17:23
  • 418

消息队列的两种模式

Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。...
  • HEYUTAO007
  • HEYUTAO007
  • 2015年12月01日 16:30
  • 46379

Android消息机制-深入理解消息队列的工作模式

前言 队列:队列是一种简单的先进先出的数据结构。 在代码中, 对队列的操作应该加入同步机制,因为队列可以接受多个线程同时向队列发送消息。 Android消息机制中的成员 这里可以用一句话描述消息...
  • u014665060
  • u014665060
  • 2016年02月25日 11:30
  • 1250

Android 消息队列模型

Android系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列(Message Queue)和一个消息循环(Looper)。Android中除了UI线程(主...
  • u010292581
  • u010292581
  • 2016年04月08日 09:54
  • 238

Android消息机制 异步消息 & 消息队列排序

之前消息机制的原理都已经分析过了,不过对java层的消息队列的排序和异步没有详细讲过。 一、消息队列排序 一般的像我们普通调用Handler发送消息,最后都会调用MessageQueue的enqu...
  • kc58236582
  • kc58236582
  • 2016年11月08日 16:26
  • 1060

Android消息队列模型

Google官方给Handler的解释如下: A Handler allows you to send and process Message and Runnable objects ...
  • duanyy1990
  • duanyy1990
  • 2015年06月26日 14:15
  • 559

Android消息队列模型介绍

转载自http://www.cnblogs.com/ghj1976/archive/2011/05/06/2038469.html Android 的消息队列模型 Android是参考Wi...
  • ni357103403
  • ni357103403
  • 2015年12月03日 11:11
  • 204
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 的消息队列模型
举报原因:
原因补充:

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