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的关系如下图所示:
一个Activity中可以创建多个工作线程或者其他的组件,如果这些线程或者组件把他们的消息放入Activity的主线程消息队列,那么该消息就会在主线程中处理了。
因为主线程一般负责界面的更新操作,并且Android系统中的widget不是线程安全的,所以这种方式可以很好的实现Android界面更新。在Android系统中这种方式有着广泛的运用。
那么一个线程怎样把消息放入主线程的消息队列呢?答案是通过Handle对象,只要Handler对象以主线程的Looper创建,那么调用Handler的sendMessage等接口,将会把消息放入队列都将是放入主线程的消息队列。并且将会在Handler主线程中调用该handler的handleMessage接口来处理消息。
更多Android消息队列的信息请参看: http://my.unix-center.net/~Simon_fu/?p=652
下面这个图从另外一个角度描述了他们的关系:
参考资料:
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系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列(Message Queue)和一个消息循环(Looper)。Android中除了UI线程(主线程...
消息的类型,在Handler类中的handleMessage方法中得到单个的消息进行处理,在单线程模型下,为了线程通信问题,Android设计了一个Message Queue(消息队列), 线程间可以通过该Message Queue并结合Handler和Looper组件...
Linux进程间通信之消息队列.适用于任意两个进程间,本程序为基本模型,实现了消息队列.
第15章 Android应用程序线程的消息循环模型 15.1 应用程序主线程消息循环模型 15.2 与界面无关的应用程序子线程消息循环模型 15.3 与界面相关的应用程序子线程消息循环模型 第16章 Android应用程序的安装和...
第15章 Android应用程序线程的消息循环模型 15.1 应用程序主线程消息循环模型 15.2 与界面无关的应用程序子线程消息循环模型 15.3 与界面相关的应用程序子线程消息循环模型 第16章 Android应用程序的安装和显示...
Android 单线程模型详解及实例 我们今天将会在这篇文章中为大家详细介绍有关Android单线程模型的相关内容。希望初学者们可以通过本文介绍的内容对这一概念有一个充分的认识,并从中对这一系统有一个深刻的认识。 当...
描述技术演示的各个方面,包括将OpenGL ES与Android NDK一起使用,自定义消息队列,交互JNI和Java活动,使用NORAD数据库并解析其数据。 特征: 带有clang编译器的C ++ 11 OpenGL ES 2 多点触控可缩放,旋转和移动...
10.1.1等待队列 10.1.2支持阻塞操作的virtualfifo设备驱动 10.2 Linux的轮询访问 10.2.1应用程序中的轮询编程 10.2.2设备驱动中的轮询编程 10.2.3支持轮询操作的virtualfifo驱动 第11章Linux设备驱动中的异步访问 ...
Handler:可以发布或者处理一个消息或者操作一个Runnable,通过Handler发布消息,消息将只会发送到与它关联的消息队列,然也只能处理该消息队列中的消息 Looper:是Handler和消息队列之间通讯桥梁,程序组件首先...
10.1 理解Android安全性模型 10.1.1 安全性概念概述 10.1.2 为部署签名应用程序 10.2 执行运行时安全性检查 10.2.1 进程边界上的安全性 10.2.2 声明和使用权限 10.2.3 理解和使用自定义权限 ...
Android系统源代码情景分析光盘资料 目录 第1篇初识Android系统 第1章 准备知识................................................................ 2 1.1 Linux内核参考书籍......................................
本文将对Binder的设计细节做一个全面的阐述,首先通过介绍Binder通信模型和 Binder通信协议了解Binder的设计需求;然后分别阐述Binder在系统不同部分的表述方式和起的作用;最后还会解释Binder在数据接收端的设计...
10.1 理解Android安全性模型 10.1.1 安全性概念概述 10.1.2 为部署签名应用程序 10.2 执行运行时安全性检查 10.2.1 进程边界上的安全性 10.2.2 声明和使用权限 10.2.3 理解和使用自定义权限 ...
NIO服务器采用Java Netty + Redis消息队列提供消息实时提醒 开发笔记 设计好Json数据协议,利用PHP输出Json数据,没有采用Retrofit之类框架,通过封装Okhttp和Gson传入class对象直接获取Java模型对象(出错也会将错误...
我们不需要将消息发布到此队列。 因此,没有使用Looper和MessageQueue 。 我们要读取传感器数据的每个线程上都需要一个新的Handler 。 HandlerThread必须将消息发布到这些线程中的每个线程。 现在,我们仅从UI线程...
A HttpNetClient for Java or Android.一个基于Java原生的Http客户端。HttpNet网络请求框架基于HttpUrlConnection,采用Client Request Call的请求模型,后续将会实现 Https、队列、缓存模块
内存泄漏基本概念 内存检测这部分,相关的知识有JVM虚拟机垃圾收集机制,类加载机制,内存模型等。编写没有内存泄漏的程序,对提高程序稳定性,...2、或者Handler持有某个组件的context,同时如果Looper的消息队列中
其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...
在这里,在Amazon SQS上为每个Android客户端创建一个队列。 服务器将数据插入队列。 在Android上,有一个持续的后台服务,该后台服务不断监听队列中的数据。 在获取数据时,它会生成一条通知。 如果用户强行关闭...