研究了下android下的 handler  message 实现原理:

new handler() 的时候  从ThreadLocal里面 获取当前线程下的

Looper实例下的 MessageQueue 的引用 保存在 handler.mQueue属性里面

handler发送消息本质就是向此集合写值

几个比较重要的节点

1.Looper.perpare() 实例化当前线程Looper对象

2. new handler()   选定 当前线程Looper对象

3.handler.sendMessage() 发送消息  本质是向 mQueue写值  往选定的Looper存消息

4.Looper.loop()方法 取出当前线程Looper对象的消息执行相关操作 本质是从当前MessageQueue 取值

所以  使用的时候应该注意

1.  new Handler 和 Looper.loop,Looper.prepare  是同一个线程 ,sendMessage可以在任何线程

2.  new Handler  必须在 Looper.perpare()之后  (Looper 不存在 肯定不可能有  mQueue)

3. 主线程默认调用了Looper.loop,Looper.prepare  其他线程需手动处理

最新文章

  1. ACM water
  2. ASP.NET发送电子邮件
  3. poi excel导出,下载
  4. h.APR通道是个怎么回事
  5. Fiddler:在PC和移动设备上抓取HTTPS数据包
  6. unp.h
  7. LA 4255 Guess
  8. HTML基础和表格
  9. Java数据库编程(JDBC)
  10. EXTJS 4.2 资料 控件之 xtype: "fieldcontainer",追加html
  11. HW7.10
  12. 2016年团体程序设计天梯赛-决赛 L1-5. 是不是太胖了(5)
  13. 修改某个UITextField的键盘的返回键类型以及监听键盘的高度变化,取到键盘动画退出弹出的时间,一起随着键盘顶出来或者压下去,
  14. 19_Python元组总结
  15. H3C_IRF
  16. sql server导出大批量数据
  17. windows与linux ping 显示的ip不一样
  18. WCF开发实战系列一:创建第一个WCF服务 转
  19. 【基础知识】ActiveMQ基本原理
  20. 《Java程序猿面试笔试宝典》之Java变量命名有哪些规则

热门文章

  1. springboot项目整合rabbitMq涉及消息的发送确认,消息的消费确认机制,延时队列的实现
  2. Java 常用类-程序员头大的日期时间API
  3. 【字符串算法】AC自动机
  4. Java知识系统回顾整理01基础06数组06二维数组
  5. 版本控制系统之git
  6. GAN网络之入门教程(五)之基于条件cGAN动漫头像生成
  7. springmvc执行原理
  8. html学习(3)
  9. pytest文档54-Hooks函数terminal打印测试结果(pytest_report_teststatus)
  10. docker19.03限制容器使用的cpu资源