Android线程之异步消息处理机制(二)——Message、Handler、MessageQueue和Looper

异步消息处理机制解析

   Android中的异步消息处理主要有四个部分组成,Message、Handler、MessageQueue和Looper。

1、Message

  Message是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。上个例子中就使用了Message的what字段,除此之外还可以使用arg1和arg2字段来携带一些整形数据,使用obj字段携带一个Object对象。

2、Handler

  Handler顾名思义也就是处理者的意思,它主要是用于发送和处理消息的。发送消息一般是使用Handler的sendMessage()方法,而发出的消息经过一系列地辗转处理后,最终会传递到Handler的handleMessage()方法中。

3、MessageQueue

  MessageQueue是消息队列的意思,它主要用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待被处理。每个线程中只会有一个MessageQueue对象。

4、Looper

  Looper是每个线程中的MessageQueue的管家,调用Looper的loop()方法后,就会进入到一个无限循环当中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的handleMessage()方法中。每个线程中也只会有一个Looper对象。

 

  了解了Message、Handler、MessageQueue以及Looper的基本概念后,我们再来对异步消息处理的整个流程梳理一遍。首先需要在主线程中创建一个Handler对象,并重写handleMessage()方法。然后当子线程中需要进行UI操作时,就创建一个Message对象,并通过Handler将这条消息发送出去。之后这条消息会被添加到MessageQueue的队列中等待被处理,而Looper则会一直尝试从MessageQueue中取出待处理消息,最后分发回Handler的handleMessage()方法中。由于Handler是在主线程中创建的,所以此时handleMessage()方法中的代码也会在主线程中运行,于是我们在这里就可以安心的进行UI操作了。

 

 

下面这几个博客写的也不错,推荐下,有空再深入的总结一下

http://blog.csdn.net/a254373829/article/details/6933027

http://blog.csdn.net/nanzhiwen666/article/details/8292981

http://www.cnblogs.com/shirley-1019/p/3557800.html

http://www.cnblogs.com/net168/p/4082217.html

转载于:https://www.cnblogs.com/longjunhao/p/4234541.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 树状结构图,linux下tree指令的用法, 树状图列出目录, 树状图逐级列出目录...

tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装,安装sudo apt install tree## or using yum# yum -y install tree语法tree[-aACdDfFgilnNp…

映射表map(平衡二叉树实现)_手动实现Java集合容器之TreeMap(上)

上一篇我们手写了HashMap,还有一个很重要的Map的实现类TreeMap。打开源码第一句话:* A Red-Black tree based {link NavigableMap} implementation.TreeMap是一个基于红黑树的实现。对红黑树没有了解怎么办,那就先搞清楚红黑树的原理。只要理…

wltc循环多少公里_原来所有车都烧机油!但是烧多少才算正常你知道吗?

点击上方“腾讯汽车”关注我们,最新汽车资讯,最方便的用车常识还有最萌的小编都在这里啦!最为当今汽车用户最为关心的问题,烧机油现象被很多用户当做引擎是好是坏的重要标准。但根据机油在引擎内冷却及清理引擎内杂质的循环机制来…

LeetCode 1806. 还原排列的最少操作步数(模拟)

文章目录1. 题目2. 解题1. 题目 给你一个偶数 n​​​​​​ ,已知存在一个长度为 n 的排列 perm ,其中 perm[i] i​(下标 从 0 开始 计数)。 一步操作中,你将创建一个新数组 arr ,对于每个 i &#xff…

linux 间隔定时器,Linux间隔定时器的使用 探索一

2011年1月17日之前看《高级Unix编程》说有基本定时器与高级定时器之分好像基本定时器不符合我的要求,那么就先来个高级的吧。写个代码看看会有什么发生:2011年1月18日看下timer_create函数intt1;timer_t tm_id;//timer_t其实是个long型t1 timer_create(…

游标操作 for Oracle

游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。 为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行…

python3经典实例_Python3十大经典错误及解决办法

接触了很多Python爱好者,有初学者,亦有转行人。不论大家学习Python的目的是什么,总之,学习Python前期写出来的代码不报错就是极好的。下面,严小样儿为大家罗列出Python3十大经典错误及解决办法,供大家学习。…

python谱聚类算法_谱聚类Spectral clustering(SC)

在之前的文章里,介绍了比较传统的K-Means聚类、Affinity Propagation(AP)聚类、比K-Means更快的Mini Batch K-Means聚类以及混合高斯模型Gaussian Mixture Model(GMM)等聚类算法,今天介绍一个比较近代的一类算法——Spectral Clustering 中文通常称为“谱…

LeetCode 1807. 替换字符串中的括号内容(哈希map)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s ,它包含一些括号对,每个括号中包含一个 非空 的键。 比方说,字符串 "(name)is(age)yearsold" 中,有 两个 括号对,分别包含键 “name” 和 “age” 。 你知…

bootice.exe linux 启动盘,下载BOOTICE来把你的U盘做成启动盘

为了方便维护电脑,需要制作一个合适的U盘启动盘。网上制作U盘启动盘的工具也有很多,我下面使用bootice这个U盘启动盘制作工具来制作U盘启动盘。下载BOOTICE1、BOOTICE>分区管理G,对U盘进行格式化,FAT16,卷标设置为G…

数据类型的选择

1、CHAR与VARCHAR CHAR与VARCHAR类型类似,都用来存储字符串。 CHAR:固定长度,处理速度较VARCHAR快,但浪费空间。 VARCHAR:可变长度 1 CHAR(4)和VARCHAR(4)列检索的值并不总相同,CHAR列删除了尾部的空格 2、…

excel打开空白_啥?下载的文件显示“文件已损坏,无法打开”?

推荐文章:Windows10系统的优化工具神器对于一个开发人员的我,这两天在网站做一个导出Excel表格功能,遇到了一个坑。在本地测试导出并且可以打开,但是到了测试环境导出打开却显示“文件已损坏,无法打开”。刚开始以为是…

erp故障处理流程图_PLC故障常见原因及处理方法!

欢迎关注“热控圈 ” ID:rekongquan传播热控知识,分享技术精华!第一部分、运行中PLC故障常见原因及处理方法(一)、外围电路元器件故障此类故障在PLC工作一定时间后的故障中经常发生。在PLC控制回路中如果出现元器件损坏故障,PLC控…

LeetCode 1808. 好因子的最大数目(整数拆分,乘积最大)

文章目录1. 题目2. 解题1. 题目 给你一个正整数 primeFactors 。你需要构造一个正整数 n ,它满足以下条件: n 质因数(质因数需要考虑重复的情况)的数目 不超过 primeFactors 个。n 好因子的数目 最大化。 如果 n 的一个因子可以…

请输入星期的第一个字母c语言,C语言经典案例:请输入星期几的第一个字母来判断一下是星期几,...

需求描述:请输出礼拜几的第一个字母来断定一下是礼拜几,假如第一个字母一样,则持续断定第二个字母。C语言案例分析:用情形语句比拟好,假如第一个字母一样,则断定用情形语句或if语句断定第二个字母。实现代码…

实用crontab命令

常用crontab如下: crontab -e 编辑 crontabcrontab -l 显示 crontabcrontab -r 删除 crontabcrontab -v 显示上一次编辑 crontab 的时间,但不是所有系统适用。 编辑crontab在指令模式輸入 "crontab -e" 便会用预设编辑器打开 crontab &#…

安卓apk签名提取工具_Android测试工具入门介绍(二)

今天我们来讲讲一款牛逼的安卓集成工具:就是大名还算顶顶的AndroidKill;先来个软件界面截图:多么简单有华丽的界面啊!我说的是功能华丽,该有的功能他都有。首先我们先点开菜单中的Android,配置下APKTOOL管理…

atoi函数_每日一道 LeetCode (50):字符串转换整数 (atoi)

❝每天 3 分钟,走上算法的逆袭之路。❞前文合集每日一道 LeetCode 前文合集代码仓库GitHub:https://github.com/meteor1993/LeetCodeGitee:https://gitee.com/inwsy/LeetCode题目:最长回文子串难度:「中等」题目来源&a…

面向对象4大特性的作用

文章目录1. 封装2. 抽象3. 继承4. 多态学习自 极客时间《设计模式之美》 1. 封装 隐藏保护内部数据,不被随意修改,提高可维护性仅暴露必要的接口,提高易用性 2. 抽象 提高代码可扩展、可维护性,修改不需要改变定义,…

计算机c语言二级试题及答案,计算机c语言二级考试试题及其答案.doc

计算机二级试题一选择题(1)下列叙述中正确的是A)算法的效率只与问题的规模有关,而与数据的存储结构无关B)算法的时间复杂度是指执行算法所需要的计算工作量C)数据的逻辑结构与存储结构是一一对应的D)算法的时间复杂度与空间复杂度一定相关(2)在结构化程序设计中&…