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的关系如下图所示:
一个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://www.2cto.com/kf/201105/89970.html
深入理解Android消息处理系统——Looper、Handler、Thread:http://www.2cto.com/kf/201105/89971.html
Android线程模型(Painless Threading) :http://www.2cto.com/kf/201105/89972.html
android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime)
http://www.2cto.com/kf/201105/89973.html
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.2cto.com/kf/201105/89903.html
Android Runnable :http://www.2cto.com/kf/201105/89974.html
相关新闻>>
- 发表评论
-
- 最新评论 更多>>