文档章节

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...

大二架构师
2018/05/07
0
0
android基础知识02——线程安全3:Message,MessageQueue,Handler,Looper

android的UI操作不是线程安全的,同时也只有主线程才能够操作UI,同时主线程对于UI操作有一定的时间限制(最长5秒)。为了能够做一些比较耗时的操作(比如下载、打开大文件等),android提供...

迷途d书童
2012/03/23
737
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
2018/06/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jmeter参数的AES加密使用

在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况。以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时...

程序猿拿Q
6分钟前
0
0
MYSQL 日期函数 Date and Time Functions

Table 12.13 Date and Time Functions Name Description ADDDATE() Add time values (intervals) to a date value ADDTIME() Add time CONVERT_TZ() Convert from one time zone to another ......

_liucui_
12分钟前
0
0
Android代码混淆ProGuard工作原理简介

ProGuard能够对Java类中的代码进行压缩(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy)。    1. 压缩(Shrink): 在压缩处理这一步中,用于检测和删除没有使用的类,字段...

SuShine
14分钟前
0
0
Idea 2018激活

教程地址: https://www.52pojie.cn/thread-781394-1-1.html 亲测可用

一个不正经的程序员
20分钟前
0
0
Android组件化开发实践和案例分享

目录介绍 1.为什么要组件化 1.1 为什么要组件化 1.2 现阶段遇到的问题 2.组件化的概念 2.1 什么是组件化 2.2 区分模块化与组件化 2.3 组件化优势好处 2.4 区分组件化和插件化 2.5 applicatio...

潇湘剑雨
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部