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的关系如下图所示:

Android 的消息队列模型_第1张图片

一个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 的消息队列模型_第2张图片

参考资料:

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

更多相关文章

  1. Android进程 与 消息模型
  2. AndroidUI线程机制
  3. Android Handler机制7之消息发送
  4. 【Android 开发】: Android 消息处理机制之四: Android 消息循环
  5. 【Android 开发】: Android 消息处理机制之一: Handler 与 Messa
  6. AndroidAndroid程序提示和消息button响应事件
  7. Android异步处理系列文章四篇之一使用Thread+Handler实现非UI线
  8. Android消息循环
  9. 你对进程线程到底理解有多少

随机推荐

  1. the user data image is used by another
  2. Android(安卓)SystemClock 笔记
  3. delphi xe5 android 手机上使用sqlite
  4. Android消息机制简述(Java层)
  5. Android(安卓)view更改背景资源,padding消
  6. TSwitch 中文简繁显示支持(XE6 Android)
  7. openfire+asmack搭建的安卓即时通讯(四) 15
  8. Manifest.permission 这个类定义了androi
  9. iBackDoor(爱后门)和DroidBackDoor(安后
  10. Android(安卓)图片转动效果(一)