Message、Handler、Message Queue、Looper 之间的关系

单线程模型中Message、Handler、Message Queue、Looper之间的关系

1、Message

Message即为消息,可以理解为线程间交流的信息。处理数据后台线程需要更新UI,你可以发送Message内含一些数据给UI线程。

2、Handler

Handler 即为处理者,是Message的主要处理者,负责Message的发送,Message内容的执行处理。
后台线程就是通过传进来的Handler对象引用来sendMessage(Message)。而使用Handler,需要implement该类的handleMessage(Message)
方法。

3、Message Queue

Message Queue即为消息队列,用来存放通过Handler发布的消息,按照先进先出原则执行。
每个Message Queue都会有一个对应的Handler。Handler会向Message Queue通过两种方法发送消息:
sendMessage 或 post。这两种消息都会插在Message Queue队尾并按照先进先出原则执行。
但通过这两种方法发送的消息执行的方式略有不同:
通过sendMessage发送的是一个Message对象,会被Handler的handleMessage()方法处理;
而通过post方法发送的是一个Runnable对象,则会自己执行。

4、Looper

Looper是每条线程里Message Queue的管家。
Android没有Global 的Message Queue,而Android 会自动替主线程(UI线程)建立Message Queue,但在子线程里并没有建立Message Queue。
所以调用Looper.getMainLooper()得到的主线程的Looper不为Null, 但调用Looper.myLooper()得到当前线程的Looper就有可能为Null。

借用一下别人的一个流程图。

时间: 2024-08-02 23:05:26

Message、Handler、Message Queue、Looper 之间的关系的相关文章

在单线程模型中 Message、Handler、Message Queue、Looper 之间的关系

Message,信息的载体,用来传递数据给Handler. Handler (Handler处理者,是 Message 的主要处理者,负责 Message 的发送,Message 内容的执行处理)发送和处理Message和Runable对象,这些对象和一个线程的MessageQueue相关联.每一个线程实例和一个单独的线程以及该线程的 MessageQueue 相关联.Handler和创建它的线程绑定在一起,把 Message和Runable 对象传递给 MessageQueue,这些对象离开

Android面试题 请解释下单线程模型中Message、Handler、MessageQueue、Looper之间的关系

简单的说,Handler获取当前线程中的looper对象,looper用来存放从MessageQueue中取出的Message,再由Handler进行Message分发和处理,按照先进先出执行. MessageQueue(消息队列):用来存放通过Handler发送的消息,通常附属于某一个创建它的线程,可以通过Looper.myQueue()得到当前线程的消息队列. Handler:是Message的主要处理者,负责Message的发送,Message内容的执行处理.例如将消息发送到消息队列(se

单线程模型中Message、Handler、MessageQueue、Looper之间的关系

Handler简介: 一个Handler允许你发送和处理Message和Runable对象,这些对象和一个线程的MessageQueue相关联.每一个线程实例和一个单独的线程以及该线程的MessageQueue相关联.当你创建一个新的Handler时,它就和创建它的线程绑定在一起了.这里,线程我们也可以理解为线程的MessageQueue.从这一点上来看,Handler把Message和Runable对象传递给MessageQueue,而且在这些对象离开MessageQueue时,Handler

Handler和Message以及Looper之间的三角关系

说到Handler想必大家都经常用到,在非UI线程更新UI那可是利器,用起来也非常容易上手 从使用上来说,我们只需要关注sendMessage和handleMessage即可 所以我们先从Handler和Message来说起,先看一小段代码 public static final int UPDATE_TEXT_VIEW = 0; public TextView mResultTextView = null; // new 一个 Handler 对象, 以内部类的方式重写 handleMessa

Message、Handler、Message Queue、Looper、Thread之间的关系(未完成)

1. 请解释下在单线程模型中Message.Handler.Message Queue.Looper.Thread之间的关系 2. 什么是IntentService?有何优点? 1) 它是对单线程消息模型的封装 2)IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker t

android的handler、looper、Message之间的关系

handler:绑定到一个线程上,一个线程可以有多个handler looper:线程跟looper是一一对应的,所以looper不能被调用两次否则会抛出异常 messge:handler利用message来携带消息 messagQueue:用来状态message,一个looper对应一个消息队列 如何来判断一个消息队列对应一个handler呢,在sendmessage中获取到一个消息队列的持有者looper looper的两个方法:prepare()和loop() 1. public stat

Handler Message MessageQueue Looper 之间的联系

Handler Message MessageQueue Looper 之间的联系

Handler,Message,Looper的关系

Android系统中,Java的应用程序和其他的系统相同,都是靠消息驱动工作的,大致的工作原理是: 有一个消息队列,可以往这个消息队列中投递消息. 有一个消息循环,不断从消息队列中取出消息,然后处理. 在Android系统中,这些工作主要是由Looper和Handler类来实现. Looper类,用于封装消息循环,并且有一个消息队列. Hanlder类,有点像辅助类,它封装消息投递,消息处理等接口. Looper类分析 在线程中有一个线程局部变量类,调用Looper的prepare()方法,会在

Android 之异步任务(AsyncTask,Handler,Message,looper)

AsyncTask: 3个类型(Params,Progress和Result),4个步骤(onPreExecute(),doInBackground(Params…),onProgressUpdate(Progress…), onPostExecute(Result) ) Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理. 首先明确Android之所以有Handler和AsyncTask,都是为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异