`
daojin
  • 浏览: 690255 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Android面试题目之六---Handler,Looper和MessageQueue深入研究

阅读更多
1.Handler,  MessageQueue, Looper 之间的关系图。

   a. Looper相当于一个引擎,从队列中获取消息,然后发送给Handler.
   b. Handler不但能接收消息,还能发送消息。也就是说它是一个消息收发器,同时还可      以查询和移除消息。
   c. MessageQueue是一个消息队列,提供阻塞的next方法,next阻塞一直到退出或者发现另外一个消息。

从消息传递层面上讲,消息从handler出发,进入到mesageQueue里面,然后Looper从messageQueue里面取出,发送给handler。下图显示的消息的传递路线,这就叫做异步消息机制。







从依赖关系来讲,MessageQueue对handler没有直接依赖关系, MessageQuueue对Looper没有任何依赖。下图绘制了依赖关系。比较强的依赖关系就是Handler和Looper都依赖于MessageQueue。看来MessaegQueue才是整个机制的核心。





从另外一个设计层面上讲,多线程编程中有一个生产者和消费者模式。





下面具体分析各个类
2. 首先要看接口Handler(消息生产者和消费者)
a. 创建
obtainMessage
b. 发送
post
postAtTime
postDelayed
postAtFrontOfQueue
sendMessage
sendEmptyMessage
sendEmptyMessageDelayed
sendEmptyMessageAtTime
sendMessageDelayed
sendMessageAtTime
sendMessageAtFrontOfQueue
runWithScissors
c. 删除
removeCallbacks
removeMessages
removeCallbacksAndMessages

d. 查询
hasMessages
hasCallbacks
e. 接受消息
handleMessage
dispatchMessage
可以看到handler 除了消息的收发,还可以查询和取消。

3. 再看接口MessageQueue(消息存储者)
a. Idle处理
isIdle
addIdleHandler
removeIdleHandler

b.polling 查询。实际上是linux中的poll 或这epoll。意思是说正在等待消息。
isPolling

c.下面这两个是对文件描述符的监听。对应的是linux中poll或者epoll 中的文件描述符。具体需要查看linux 文档。
addOnFileDescriptorEventListener
removeOnFileDescriptorEventListener

d.下面这个是加入一个屏障,阻碍当前所有的消息处理,直到这个屏障被移除。
postSyncBarrier
removeSyncBarrier

e. 下面是一些受保护的方法。

这个是一个阻塞的方法,一直等待直到找到一个消息或者退出。
Next

这是一个退出next的方法。
quit

下面几个是消息队列常见的几个接口。增删查接口。
enqueueMessage
hasMessages
removeMessages
removeCallbacksAndMessages

4. 最后看Looper,也就是我们的消息消费者:
最关键的几个方法
prepare
loop
quit
quitSafely

还有几个查询的方法
getMainLooper
myLooper
myQueue
isCurrentThread
getThread
getQueue
综上可以看出一些端倪,handler这整套机制都是围绕消息的,那么为什么使用消息队列呢?
消息队列是一种多线程的设计模式。

一个模块接收另外一个模块的调用。这种调用可能会很多:

* 一个API被调用时, 被调用者因为资源(线程资源,内存资源等)的有限性,其执行速度可能跟不上调用者的紧急要求,因此使调用者阻塞。 而消息队列就可以防止这种阻塞。

调用者可能的紧急要求有:

1. 调用者对单次的执行时间非常敏感,例如UI线程, 或者正在接收IO请求,用户的输入或者网络输入等。
2. 调用者在执行一些更加紧急任务的时候,例如扫描病毒等。

* 另一方面,我们又希望这些请求能够被处理。
这个时候我们就可以把请求缓存起来,而消息队列就是这样一种缓存机制。


  • 大小: 5.7 KB
  • 大小: 7.7 KB
  • 大小: 6 KB
0
0
分享到:
评论

相关推荐

    Handler+Looper+MessageQueue

    【Android 线程间通信:Handler、Looper 和 MessageQueue 深度解析】 在 Android 应用开发中,为了保证界面的流畅性,我们通常需要将耗时操作放在非 UI 线程中执行,然后通过某种机制将结果传递回 UI 线程进行界面...

    Handler Looper MessageQueue 源码解析

    在Android系统中,Handler、Looper和MessageQueue是实现线程间通信的核心组件,它们共同构建了一个消息处理机制。本文将深入解析这三者的源码,帮助你理解它们的工作原理,并教你如何手写一套自己的Handler系统。 ...

    handler与looper及messagequeue的简单总结

    在Android开发中,Handler、Looper和MessageQueue是用于实现线程间通信的关键组件,它们共同构建了一个消息处理机制。理解这三个概念以及它们之间的关系对于优化应用程序的性能和响应性至关重要。 Handler(处理器...

    Android 异步处理 Handler+Looper+MessageQueue深入详解

    Handler、Looper和MessageQueue是Android异步处理机制中的核心组件,它们共同构建了一个消息传递系统,使得在不同线程间进行数据交换变得可能。下面我们将深入探讨这三个组件的工作原理及其在实际开发中的应用。 ...

    Android 之 Looper、MessageQueue、Handler 与消息循环

    ### Android之Looper、MessageQueue、Handler与消息循环详解 #### 一、概述 在Android开发过程中,消息处理机制是至关重要的部分,它涉及到应用程序如何管理、传递和响应各种事件。本篇文章将深入探讨Android中...

    Message,MessageQueue,Looper,Handler详解

    综上所述,Message、MessageQueue、Looper和Handler这四个组件共同构成了Android应用程序中处理消息的基本机制。通过它们之间的相互协作,使得应用程序能够在不同的线程间高效地传递和处理消息,从而实现了复杂的...

    Thread,Looper,Handler,Message,MessageQueue,MessagePool之间的关系

    在Android系统中,线程(Thread)、Looper、Handler、Message以及MessageQueue和MessagePool是实现异步消息处理机制的关键组件,它们共同构建了一个高效的事件驱动模型。这些组件的关系紧密,协同工作,使得Android...

    Android单线程模型中Message、Handler、Message Queue、Looper之间的关系---附实例源码

    Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理. 简单定义: 1、Message Queue(消息队列): 用来存放通过Handler发布的消息,通常...

    Android的消息处理机制--Message,MessageQueue

    4. **Looper**:充当MessageQueue和Handler之间的桥梁角色,负责循环取出MessageQueue中的消息,并交给对应的Handler处理。 #### 四、消息处理流程 1. **创建Handler**:每个需要处理消息的线程都需要一个Handler...

    活用Android的Message Queue

    理解并熟练运用Message Queue、Looper和Handler是构建高效、响应性良好的Android应用的关键。 1. **Message Queue(消息队列)的角色** - 每个线程不自动创建Message Loop,需要手动通过Looper类来建立。 - ...

    Android的消息处理机制--Looper,Handler

    `Handler`有四个构造函数,其中默认的构造函数将`Handler`与当前线程的`Looper`和`MessageQueue`关联。用户通常需要重写`handleMessage`方法来处理接收到的消息。`Callback`接口提供了另一种处理消息的方式,用户...

    Looper,MessageQueue,Handler分析之ActivityThread.java

    Looper,MessageQueue,Handler分析之ActivityThread.java

    Handler+Looper+MessageQueue+Message机制

    Message(消息):需要被传递的消息,其中包含了消息标识(what),消息处理数据和处理对象(arg1,arg2,obj),发送该消息的Handler对象(target)等,由MessageQueue统一列队,最终由Handler处理。 MessageQueue(消息...

    自定义Handler-Looper实现线程间通信

    Handler、Looper和Message是Android系统提供的一套用于在不同线程之间传递消息和进行同步的关键组件。本文将深入探讨如何自定义Handler、Looper来实现线程间的通信。 首先,我们了解下Handler的基本原理。Handler是...

    安卓Android源码——HandlerLooper2.rar

    这个压缩包“安卓Android源码——HandlerLooper2.rar”可能包含了关于这些组件的深入分析和示例代码。以下是关于`Handler`、`Looper`和`MessageQueue`的详细解释: 1. **Handler**: - `Handler`是Android中的一个...

    深入Android Handler,MessageQueue与Looper关系

    深入 Android Handler,MessageQueue 与 Looper 关系 Android 消息机制是 Android 程序设计中非常重要的一部分,其中 Handler、MessageQueue 和 Looper 是三个紧密相关的概念。Handler 是 Android 消息机制的上层...

    Message,MessageQueue,Looper,Handler详解[归类].pdf

    在Android系统中,Message, MessageQueue, Looper, 和 Handler共同构成了一个跨线程通信机制,使得UI线程和其他工作线程之间能安全地交换数据和执行任务,这对于实现复杂的异步操作和保持用户界面的响应性至关重要。...

    管理MessageQueue的Looper

    在Android系统中,MessageQueue和Looper是两个非常关键的组件,它们构成了消息处理机制的核心,尤其是在UI线程中。理解并有效地使用它们对于编写高效、响应迅速的Android应用至关重要。 `Looper`是Android中的一个...

    Android应用源码之HandlerLooper1_Android.zip

    在Android开发中,`Handler`、`Looper`和`MessageQueue`是三个核心组件,它们共同构成了Android消息处理机制,用于实现线程间的通信。这个压缩包“Android应用源码之HandlerLooper1_Android.zip”可能包含了一个示例...

    Android_Handler,Looper,Message

    在Android开发中,`Handler`、`Looper`和`Message`是实现线程间通信和异步处理的关键组件。它们共同构建了一个消息循环系统,使得应用程序可以在不同的线程之间传递和处理消息,尤其是在主线程(UI线程)与工作线程...

Global site tag (gtag.js) - Google Analytics