异步消息处理机制解析

  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相关推荐

  1. Android之多线程----异步消息处理机制之Handler详解

    一.handler的引入: 我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃.相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟 ...

  2. Android开发之异步消息处理机制AsyncTask

    转自:Android AsyncTask完全解析,带你从源码的角度彻底理解 另外一篇比较详细的博文:http://blog.csdn.net/liuhe688/article/details/6532 ...

  3. 关于在用异步消息处理机制使用Message.Obtain()方法(而非New Message)获得一个Message对象的好处

    类概述 定义一个包含任意类型的描述数据对象,此对象可以发送给Handler.对象包含两个额外的int字段和一个额外的对象字段,这样可以使得在很多情况下不用做分配工作. 尽管Message的构造器是公开 ...

  4. Android多线程----异步消息处理机制之Handler

    虽然是国庆佳节,但也不能停止学习的脚步,我选择在教研室为祖国母亲默默地庆生. 关于Android的多线程知识,请参考本人之前的一篇博客:Android 多线程----AsyncTask异步任务详解 在 ...

  5. Android异步消息处理机制 深入理解Looper、Handler、Message三者关系

    转载子:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自[张鸿洋的博客] 很多人面试肯定都被问到过,请问Android中 ...

  6. Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

    很多人面试肯定都被问到过,请问Android中的Looper , Handler , Message有什么关系?本篇博客目的首先为大家从源码角度介绍3者关系,然后给出一个容易记忆的结论. 1. 概述 ...

  7. Android异步消息处理机制 全解析

    Android异步消息处理机制主要是指Handler的运行机制以及Hanlder所附带的MessageQueue和Looper的工作过程. 本文将通过分析源码(api-28)的形式,全面解析Handl ...

  8. 以下未发布-Android的多线程以及异步消息处理机制,android移动开发基础案例教程源码

    1.Message: Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间进行数据交换.除了 what 字段,还可以使用 arg1 和 arg2 来携带整型数据,使用 ...

  9. Android Handler 异步消息处理机制的妙用 创建强大的图片载入类

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 近期创建了一个群.方便大家交流,群号: ...

最新文章

  1. 您如何确定以编程方式发送的电子邮件不会自动标记为垃圾邮件?
  2. 百度:请叫我卡车新势力
  3. 转!!配置Tomcat时server.xml和content.xml自动还原问题
  4. 阿里云服务器 宝塔面板 配置Python项目
  5. QT的QException类的使用
  6. AD 脚本kixtart运用之六(outlook邮件批量生成签名)
  7. 【基础】SQL Server系统库的作用
  8. 关于c++跟java区别的几个总结
  9. AtCoder 杂题训练
  10. centos7上安装nodejs
  11. ADO.NET Entity Framework中的并发控制 【转载】
  12. 线程池原理_Java线程池实现原理
  13. Linux中文件的分类
  14. 软件测试面试题整理(一)之自动化测试题大合集
  15. 教你炒股票21:缠中说禅买卖点分析的完备性
  16. postgres整库导入导出
  17. 小白学六轴传感器MPU6050模块(1)
  18. EDA 电子设计自动化VHDL系列课程1--加【减】法器的设计
  19. SpringBoot整合IoTDB
  20. Linux下的motion detection(最简单的办公室监控系统)

热门文章

  1. 快速通读《现代软件工程——构建之法》
  2. 火狐浏览器Firefox如何使用插件,火狐有哪些好用的插件
  3. ASP.NET 2.0新特性视频教程下载
  4. Diango博客--23.单元测试:测试 blog 应用
  5. Readhat中挂载yum源
  6. 荣耀magic3会用鸿蒙,赵明:荣耀Magic3芯片领先行业,大家看到以后会换掉手机!...
  7. Linux 命令之 cut
  8. html里写js ajax吗,js、ajax、jquery的区别是什么?
  9. 回归分析什么时候取对数_冬蜜什么时候取,冬天取蜂蜜的方法
  10. linux libbz2.so.1,libbz2.so.1.0 = not found 试过了链接和设置环境变量