Android经常用到Thread和Handler,其中还涉及到另一个于消息队列(MessageQueue)相关的类Looper。

今天在这里顺便把这几个类的定义和之间的关系打理一下。

 

 

先看源码中的注释

 

Thread,A Thread is a concurrent unit of execution
线程是一个并发的执行单位。

 

Looper,Class used to run a message loop for a thread.
维护线程的消息循环类。


Handler,A Handler allows you to send and process Message and Runnable
 objects associated with a thread's MessageQueue。
向消息队列发送消息(Runnable object),或者执行消息队列的消息(Runnable object).

 

这三者之间的关系:

一、Handler和Looper关系
区别:
两者都有MessageQueue打交道,但是Handler是向消息队列发送消息SendMessage(queue.enqueueMessage),而Looper是从取出消息(queue.next)。
联系:
1、Handler依赖Looper,每一个Handler必然有一个mLooper的成员变量。他的MessageQueue就是获取的Looper的消息队列,在构造函数中mQueue = looper.mQueue,即他们共享一个消息队列。
2、Looper取出消息在执行消息时候,实际上是运行的Handler的函数体。因为每一个Message类都有一个handler的参数(看Message定义)。
Looper在取出消息执行的时候,调用的就是这个Handler的HandleMessage()函数。

具体的步骤如下:Looper在Loop函数中,取出消息Message,然后调用该消息对应Handler的dispatchMessage函数,即Handler的handlerMessage函数。

二、Looper和Thread关系
Looper依赖Thread,Looper只是一个消息循环体,它空有一段代码。只有Looper的代码跑在Thread中,才是一个真正的消息循环。(这点如同学习操作系统的进程和函数差不多,其实也就是那么回事儿)

 

对于一个Android而言,每一个界面都有一个默认的Thread、消息循环体Looper和Handler。

调用new Handler()可以获得当前线程的Handler

调用Looper.myLooper()可以获得当前线程的Looper。

更多相关文章

  1. Android 抽象回调函数以及接口回调更新UI
  2. [置顶] Android WebKit消息处理(二)Touch事件的分发处理
  3. Android消息队列(三)--多线程与消息处理
  4. Android 依赖注入函数库Roboguice(一)
  5. Android知识梳理:消息机制之Handler
  6. Android 消息机制 Handler (Java&Native)
  7. Android MQTT消息推送实践
  8. Android消息处理机制、Hanlder机制(Handler、Looper、MessageQueu

随机推荐

  1. Android(安卓)动画实现
  2. android 获取view在屏幕中的位置
  3. Android: Open source FileManager
  4. android 之 GridView
  5. Android.mk简要说明
  6. Android(安卓)实现添加Icon到桌面功能
  7. Mac下Android的cocos2d-x配置
  8. android TextView 设置部分文字背景色和
  9. 通过Camera进行拍照
  10. android TV开发:弹出菜单实现