Android的异步消息处理主要由4个部分组成,Message、Handler、MessageQueue和Looper

Message:在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。可以使用arg1和arg2字段来携带一些整形数据,shiyongobj携带一个Object对象

Handler:处理者,主要用于发送和处理消息的。sendMessage()方法用来发送信息,经过一系列辗转处理后,会传递到handleMessage()方法中。

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

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

异步消息处理机制的流程(以改变UI为例):

        在主线程中创建一个Handler对象,并按需求重写handlerMessage()方法。当子线程进行UI操作时,会创建一个Message对象,通过Handler的对象将这条消息(Message)发送出去,加入到MessageQueue中等待被处理,Looper则会一直尝试从MessageQueue中取出此Message,最后分发回Handler的handleMessage()方法中。

最新文章

  1. #region Json转DataTable
  2. android 发送GET请求 服务端接收乱码的问题
  3. CDH中flume是已经启动着了…
  4. Spring使用RowMapper将数据中的每一行封装成用户定义的类
  5. 关于 python 的 @property总结和思考
  6. 利用putty软件连接虚拟机中linux操作系统
  7. jsp中pageEncoding、charset=UTF -8
  8. (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载
  9. Java反射及依赖注入简单模拟
  10. hdu 4912 Paths on the tree(树链拆分+贪婪)
  11. SpriteBuilder修改CCB文件中的子CCB文件需要注意的一个地方
  12. web.xml 详细介绍
  13. BSScrollViewEdgePop
  14. windows----------telnet不是内部命令问题
  15. POJ - 3244-Difference between Triplets
  16. jackson中@JsonProperty、@JsonIgnore等常用注解总结
  17. 与spring整合就是为了不用自己创建bean 让spring帮助我们创建bean
  18. for 练习
  19. C# Winform 未能加载文件或程序集"System.Data.SQLite"或它的某一个依赖项。试图加载格式不正确的程序
  20. Linux CentOS 7.x/6.x/5.x 导入epel源

热门文章

  1. (九)MySQL用户和权限管理
  2. (2)SpringBoot 配置
  3. 5、Flask实战第5天:页面跳转和重定向
  4. oracle null 相关的另外2个方法
  5. 【Floyd】【Dilworth定理】【最小路径覆盖】【匈牙利算法】bzoj1143 [CTSC2008]祭祀river
  6. 【分块】bzoj3226 [Sdoi2008]校门外的区间
  7. 【二维单调队列】BZOJ1047-[HAOI2007]理想的正方形
  8. [CF468D]Tree
  9. 反序显示一个整数 Exercise06_04
  10. 【转载】Mini6410启动过程