Android之Handler、MessageQueue、Message、Messager与Looper关系

原创 2015年07月08日 17:18:17

Handler是android系统中一种重要的异步消息通信机制。  

线程与MessageQueue的关系?应用程序主线程自带有一个MessageQueue,而自己创建的线程没有MessageQueue。

Looper与MessageQueue的关系?Looper管理MessageQueue。

如何在新创建的线程中添加MessageQueue?在新创建的线程中,在run方法中调用Looper.prepare()方法初始化MessageQueue,最后调用Looper.loop()方法启用MessageQueue。

如何在两个线程中进行异步通信?这就需要在两个线程中分别准备消息队列,Hanlder实例,通过对方的Handler实例来发送Runnable或Message给对方进行处理。     

  android应用程序主线程即UI线程中组件的属性值的更新不能由子线程来更改,所以此时出现了Handler这个中介来解决这个问题,Handler在子线程中发送Message或Runnable到与UI线程相关联的MessageQueue队列中(有Looper维护消息队列),然后Handler在UI线程中从MessageQueue中取出Message或Runnable进行处理,来完成对UI属性值的更改或ui组件的添加。

    首先学习下Message ,Defines a message containing a description and arbitrary data object that can be sent to a Handler. This object contains two extra int fields and an extra object field that allow you to not do allocations in many cases.

   MessageQueue   Low-level class holding the list of messages to be dispatched by a Looper. Messages are not added directly to a MessageQueue, but rather through Handler objects associated with the Looper.

   Looper Class used to run a message loop for a thread. Threads by default do not have a message loop associated with them; to create one, call prepare() in the thread that is to run the loop, and then loop() to have it process messages until the loop is stopped.

   class LooperThread extends Thread {
      public Handler mHandler;


      public void run() {
          Looper.prepare();


          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };


          Looper.loop();
      }
  }

    Handler  A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue. Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables to that message queue and execute them as they come out of the message queue.


There are two main uses for a Handler: (1) to schedule messages and runnables to be executed as some point in the future; and (2) to enqueue an action to be performed on a different thread than your own.


Scheduling messages is accomplished with the post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long), sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long), and sendMessageDelayed(Message, long) methods. 

深入Android的消息机制源码详解~Handler,MessageQueue与Looper关系

一说到Android的消息机制,自然就会联想到Handler,我们知道Handler是Android消息机制的上层接口,因此我们在开发过程中也只需要和Handler交互即可,很多人认为Handler的...
  • javazejian
  • javazejian
  • 2016年03月04日 23:25
  • 1903

请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系。

Handler简介: 一个Handler允许你发送和处理Message和Runable对象,这些对象和一个线程的MessageQueue相关联。每一个线程实例和一个单独的线程以及该线程的Messag...
  • hanchendong
  • hanchendong
  • 2016年05月15日 23:27
  • 1786

Handler的实现原理及其与Message、MessageQueue关系详解

在Android中为我们提供了一个主线程和子线程之间的通信机制,这种机制就是利用Handler、Message、Looper和MessageQueue来彼此联系起来的。那么为什么要提供这么一种机制呢?...
  • u012481172
  • u012481172
  • 2015年08月13日 15:39
  • 1256

Handler、Looper、MessageQueen、Message的关系及个人理解

很久之前就说过要写这篇博客的,但是由于学习上过于紧张,一直空写。人就是这样,总会被这样那样的事情左右着。希望以后能做到一周一到两篇关于所学知识的总结或理解吧。治愈懒癌症,做一个有计划有条理的人。 在...
  • HuberJobs
  • HuberJobs
  • 2016年03月08日 18:41
  • 1106

Android 异步消息处理机制 让你深入理解 Looper、Handler、MessageQueue、Message四者关系

文章转自:http://blog.csdn.net/lmj623565791/article/details/38377229对原文个人认为不清晰的地方做了注释或修改。另外一篇很好的参考文章:Andr...
  • doubleface999
  • doubleface999
  • 2017年02月19日 09:17
  • 699

handler, Looper, Message三者的关系,作者写的很好很详细。

Looper , Handler , Message有什么关系?handler的实现原理是什么?源代码底层是如何实现的?答案就在这篇文章里...
  • u011288271
  • u011288271
  • 2016年09月08日 08:31
  • 256

Messenger解析(和Handler、IBinder、Message的关系)

为了更好的理解bound service利用Messenger来夸进程服务,这里先写一篇文章简单分析下Messenger、Handler、Message、Binder的关系。 先来看看Messe...
  • huangjijie123456
  • huangjijie123456
  • 2015年10月11日 17:15
  • 1606

深入理解异步消息处理机制Message,handler,MessageQueue,looper

本文转自: http://www.cyqdata.com/android/article-detail-36658 本篇深入理解Android消息队列原理篇,将为您讲述Android世界中...
  • jeffleo
  • jeffleo
  • 2016年03月20日 09:42
  • 595

Android Handle消息机制:秒懂Looper、Handler、Message三者关系

一般情况下,在主线程中我们绑定了Handler,并在事件触发上面创建新的线程用于完成某些耗时的操作,当子线程中的工作完成之后,会对Handler发送一个完成的信号,而Handler接收到信号后,就进行...
  • WHB20081815
  • WHB20081815
  • 2017年03月28日 17:09
  • 314

Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自【张鸿洋的博客】很多人面试肯定都被问到过,请问Andro...
  • whocases
  • whocases
  • 2017年01月23日 16:22
  • 476
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android之Handler、MessageQueue、Message、Messager与Looper关系
举报原因:
原因补充:

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