`

Handler,MessageQueue,Message 【译】

 
阅读更多
 android.os.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, postAtTime(Runnable, long), postDelayed, sendEmptyMessage, sendMessage, sendMessageAtTime, and sendMessageDelayed methods. The post versions allow you to enqueue Runnable objects to be called by the message queue when they are received; the sendMessage versions allow you to enqueue a Message object containing a bundle of data that will be processed by the Handler's handleMessage method (requiring that you implement a subclass of Handler).

 

 

When posting or sending to a Handler, you can either allow the item to be processed as soon as the message queue is ready to do so, or specify a delay before it gets processed or absolute time for it to be processed.     The latter two allow you to implement timeouts, ticks, and other timing-based behavior.

When a process is created for your application, its main thread is dedicated to running a message queue that takes care of managing the top-level application objects (activities, broadcast receivers, etc) and any windows they create. You can create your own threads, and communicate back with the main application thread through a Handler. This is done by calling the same post or sendMessage methods as before, but from your new thread. The given Runnable or Message will than be scheduled in the Handler's message queue and processed when appropriate.

      一个Handler(句柄)用于发送处理Message(消息)以及 关联到一个线程的MessageQueue(消息队列)的Runnable (可运行)对象。每个Handler实例关联一个线程以及该线程的消息队列。当创建一个新的Handler,它被绑定到创建它的线程/该线程的消息队列——此后,它将发送消息s或者runables(可运行对象)到该消息队列,并且他们将像来自于消息队列将被执行。

 

      Handler的2个主要用途:(1)在未来某个时间点,调度消息s或者可执行对象s(runables)。(2)把另一个线程需要执行的任务放入队列。调用 post, postAtTime(Runnable, long), postDelayed, sendEmptyMessage, sendMessage, sendMessageAtTime, and sendMessageDelayed 这几个方法,调度消息便完成。

Post开头的方法,当收到消息后,Runnable对象将被放入消息队列以供执行,Send开头的方法将放入Message 对象,该对象携带数据集,并被Handlder'shandleMessage方法(需要自行实例化Handler子类)。

     

     当post或者send一个Handler时,可以指定立即被执行还是将来某个特定时间点(相对于现在的延迟时间或者绝对时间点)执行。后一种方法,可以指定超时、时钟计数ticks,和其他基于时间的行为。

   当一个进程被创建,它的主线程便开始运行消息队列,消息队列它管理顶级应用程序对象(Activity,Braoadcast receiver等)以及他们创建的窗体。可以通过创建新线程并使用Handler实现与应用程序的主线程通信,具体可通过在这新线程内调用前述的post和sendMessage类方法来实现。Runnable或者Message会被Handler的消息队列调度,并适时被执行。

 

分享到:
评论

相关推荐

    Handler Looper MessageQueue 源码解析

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

    Message,MessageQueue,Looper,Handler详解

    ### Message,MessageQueue,Looper,Handler详解 #### 一、几个关键概念 ##### 1、MessageQueue:消息队列 MessageQueue是一种数据结构,顾名思义,它充当了一个消息队列的角色,用来存放各种消息对象。每一个线程...

    Handler+Looper+MessageQueue

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

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

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

    活用Android的Message Queue

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

    android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版

    本文将深入探讨Android中的线程模型,重点讲解Handler、Message Queue和AsyncTask,并提供修改Button样式的示例以及如何将这些概念整合到一个易用的方案中。 1. **Android线程模型** Android系统的主线程,也称为...

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

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

    handler与looper及messagequeue的简单总结

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

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

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

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

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

    android MessageQueue

    在Android系统中,MessageQueue是消息机制的核心组件之一,它与Handler、Looper紧密协作,用于实现线程间的通信。理解MessageQueue的工作原理对于优化应用程序性能和处理异步操作至关重要。 MessageQueue是一个内部...

    管理MessageQueue的Looper

    在Handler中,你可以发送一个Message到主线程的MessageQueue,主线程的Looper会接收到这个消息并调用Handler的`handleMessage()`,从而更新UI。 需要注意的是,每个线程只有一个Looper实例,且一旦调用`Looper.loop...

    深入Android Handler,MessageQueue与Looper关系

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

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

    MessageQueue与Looper紧密配合,当MessageQueue中有新消息时,Looper会取出并分发给对应的Handler进行处理。主线程默认已经创建了MessageQueue和Looper,而在其他非主线程中,开发者需要手动调用`Looper.prepare()`...

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

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

    android_os_MessageQueue.rar_android

    MessageQueue主要用于存储待处理的消息(Message)队列,这些消息通常由Handler创建并插入队列,然后由Looper取出并分发给相应的Handler进行处理。 1. **MessageQueue的生命周期**: - 创建:MessageQueue通常在...

    Handler+Looper+MessageQueue+Message机制

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

    Android handler message奇怪用法详解

    7. **MessageQueue插队**:`MessageQueue.next()`方法允许开发者获取并立即处理下一个消息,跳过其他等待的消息,但这需要谨慎使用,因为它可能破坏消息的正常顺序。 8. **Message的target属性**:除了Handler外,...

Global site tag (gtag.js) - Google Analytics