文档章节

Android的Handler、MessageQueue、Runnable和Looper

我希冀着
 我希冀着
发布于 2016/07/22 14:23
字数 371
阅读 72
收藏 0

Handler、MessageQueue、Runnable和Looper相信大家在Android开发过程中这四个类一定不陌生,但是面试的时候经常问道。我们先来看张图:

再来看看这张图

从上面两张图片我们可以看出,Runnable和Message都在MessageQueue里面,然后Looper从MessageQueue里面获取交给Handler来处理,到最后活的结果。需要注意的是:MessageQueue里面存放的Object一定是同类型的。总结一句话就是:

Looper不停的从MessageQueue里面获取Message,然后交给Handler处理,并得到相应结果。

说到Handler我们不得不提一下Thread了,我们再看另张图片:

可以总结为:

  • 每个Thread对应一个Looper
  • 每个Looper对应一个MessageQueue
  • MessageQueue里面可以有多个Message
  • 每个Message最多指定一个Handler

所以Thread和Handler是一对多的关系!接下来我们具体看看Handler

public void dispatchMessage(Message msg);   //Message分发处理
public void handlerMessage(Message msg);   //处理Message

首先Looper从MessageQueue获取Message会先调用Handler.dispatchMessage分发消息,所以在我们特定需求来重新dispatchMessage和handlerMessage来改变它的默认行为。Handler发送消息有send和post两种方式,send和post的区别:send和post都是将message压入Messagequeue,而send是直接处理的函数参数是Message;post则是先把其他类型的“零散”信息转换成Message,在调用send系列函数来执行下一步操作。

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
我希冀着

我希冀着

粉丝 70
博文 44
码字总数 26777
作品 0
厦门
Android工程师
Handler消息处理机制分析

Handler经常用,然后自己总结一下下 一. What、Handler 是什么 Handler 与 Message、MessageQueue、Looper 一起构成了 Android 的消息机制,Android 系统通过大量的消息来与用户进行交互,V...

大二架构师
05/07
0
0
Android Handler 机制 - Looper,Message,MessageQueue

Android Studio 2.3 API 25 从源码角度分析Handler机制。有利于使用Handler和分析Handler的相关问题。 Handler 简介 一个Handler允许发送和处理Message,通过关联线程的 MessageQueue 执行 ...

rustfisher
2017/08/02
0
0
Handlers, MessageQueue, Looper, do they all run on

http://stackoverflow.com/questions/5193913/handlers-messagequeue-looper-do-they-all-run-on-the-ui-thread/5193981#5193981 Short answer: they all run on the same thread. If instan......

freeroad
2014/09/28
0
0
Android Message 及其使用

一、线程间通讯的Message机制 1、Message介绍 frameworksbasecorejavaandroidOsMessage.java Message是线程之间传递信息的载体,包含了对消息的描述和任意的数据对象。Message中包含了两个额...

huang19830104
06/28
0
0
Android多线程及异步处理问题

1、问题提出 1)为何需要多线程? 2)多线程如何实现? 3)多线程机制的核心是啥? 4)到底有多少种实现方式? 2、问题分析 1)究其为啥需要多线程的本质就是异步处理,直观一点说就是不要让...

xubohui
2012/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway真的有那么差吗?

前言 Spring Cloud从一开始最受大家质疑的就是网关性能,那是由于Spring Cloud最初选择了使用Netflix几年前开源的Zuul作为基础,而高性能版的Zuul 2在经过了多次跳票之后,对于Spring这样的整...

Java小铺
38分钟前
1
0
SpringBoot远程调试,远程debug你的线上项目

开发环境中代码出错了,可以利用IDE的debug功能来进行调试。那线上环境出错呢? 一、假设我们的项目是部署在tomcat中,那我们就需要对tomcat进行一定对配置,配置如下。 1. windows系统中,找...

nonnetta
43分钟前
0
0
JAVA秒杀优化方向

秒杀优化方向 将请求尽量拦截在系统上游:传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小,我们可以通过限流、...

小贱是个程序员
50分钟前
0
0
C# 统计字符串中大写字母和小写字母的个数

static void Main() { int count1 = 0; int count2 = 0; Console.WriteLine("请输入字符串"); string str = Convert.ToString(Consol......

熊二的爸爸是谁
52分钟前
0
0
分布式服务框架之远程通讯技术及原理分析

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是...

老道士
58分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部