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
Android线程之异步消息处理机制(二)——Message、Handler、MessageQueue和Looper相关推荐
- Android之多线程----异步消息处理机制之Handler详解
一.handler的引入: 我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃.相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟 ...
- Android开发之异步消息处理机制AsyncTask
转自:Android AsyncTask完全解析,带你从源码的角度彻底理解 另外一篇比较详细的博文:http://blog.csdn.net/liuhe688/article/details/6532 ...
- 关于在用异步消息处理机制使用Message.Obtain()方法(而非New Message)获得一个Message对象的好处
类概述 定义一个包含任意类型的描述数据对象,此对象可以发送给Handler.对象包含两个额外的int字段和一个额外的对象字段,这样可以使得在很多情况下不用做分配工作. 尽管Message的构造器是公开 ...
- Android多线程----异步消息处理机制之Handler
虽然是国庆佳节,但也不能停止学习的脚步,我选择在教研室为祖国母亲默默地庆生. 关于Android的多线程知识,请参考本人之前的一篇博客:Android 多线程----AsyncTask异步任务详解 在 ...
- Android异步消息处理机制 深入理解Looper、Handler、Message三者关系
转载子:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自[张鸿洋的博客] 很多人面试肯定都被问到过,请问Android中 ...
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
很多人面试肯定都被问到过,请问Android中的Looper , Handler , Message有什么关系?本篇博客目的首先为大家从源码角度介绍3者关系,然后给出一个容易记忆的结论. 1. 概述 ...
- Android异步消息处理机制 全解析
Android异步消息处理机制主要是指Handler的运行机制以及Hanlder所附带的MessageQueue和Looper的工作过程. 本文将通过分析源码(api-28)的形式,全面解析Handl ...
- 以下未发布-Android的多线程以及异步消息处理机制,android移动开发基础案例教程源码
1.Message: Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间进行数据交换.除了 what 字段,还可以使用 arg1 和 arg2 来携带整型数据,使用 ...
- Android Handler 异步消息处理机制的妙用 创建强大的图片载入类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 近期创建了一个群.方便大家交流,群号: ...
最新文章
- 您如何确定以编程方式发送的电子邮件不会自动标记为垃圾邮件?
- 百度:请叫我卡车新势力
- 转!!配置Tomcat时server.xml和content.xml自动还原问题
- 阿里云服务器 宝塔面板 配置Python项目
- QT的QException类的使用
- AD 脚本kixtart运用之六(outlook邮件批量生成签名)
- 【基础】SQL Server系统库的作用
- 关于c++跟java区别的几个总结
- AtCoder 杂题训练
- centos7上安装nodejs
- ADO.NET Entity Framework中的并发控制 【转载】
- 线程池原理_Java线程池实现原理
- Linux中文件的分类
- 软件测试面试题整理(一)之自动化测试题大合集
- 教你炒股票21:缠中说禅买卖点分析的完备性
- postgres整库导入导出
- 小白学六轴传感器MPU6050模块(1)
- EDA 电子设计自动化VHDL系列课程1--加【减】法器的设计
- SpringBoot整合IoTDB
- Linux下的motion detection(最简单的办公室监控系统)
热门文章
- 快速通读《现代软件工程——构建之法》
- 火狐浏览器Firefox如何使用插件,火狐有哪些好用的插件
- ASP.NET 2.0新特性视频教程下载
- Diango博客--23.单元测试:测试 blog 应用
- Readhat中挂载yum源
- 荣耀magic3会用鸿蒙,赵明:荣耀Magic3芯片领先行业,大家看到以后会换掉手机!...
- Linux 命令之 cut
- html里写js ajax吗,js、ajax、jquery的区别是什么?
- 回归分析什么时候取对数_冬蜜什么时候取,冬天取蜂蜜的方法
- linux libbz2.so.1,libbz2.so.1.0 = not found 试过了链接和设置环境变量