文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式——命令模式

参考博客 1. 认识命令模式 1. 定义:将一个请求封装成为一个对象,从而可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,并支持可撤销操作。 2. 组织结构: Commond:定义命令的...

江左煤郎
15分钟前
0
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
6
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
0
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
0
0
JAVA 内存回收

参考:https://www.cnblogs.com/leesf456/p/5218594.html 1,JMV 中哪些可以作为 GC Root? 1. 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。 2. 方法区中的类静态属性引...

Carlyle_Lee
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部