前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从头再看Handler

从头再看Handler

作者头像
longzeqiu
发布2020-03-26 11:07:33
3250
发布2020-03-26 11:07:33
举报
文章被收录于专栏:Android小知识Android小知识

Handler是什么

  • 想必每一个做安卓开发的人都知道Handler,就是线程间通信的桥梁,那么他的本质是什么呢,说白了就是内存共享。

Handler的是如何实现内存共享的

  • 这就要说到Message消息,说到消息就需要说到MessageQueue消息队列,那么有了消息和消息队列,肯定少不了Looper消息泵,最后如何运行起来呢,就用到了Looper.loop()消息泵的开关,好了到这里Handler基本就明了了。

从源码理解Handler

  • 我们用Handler发送消息都是通过sendMessage()或者post()方法,最后调用的都是enqueueMessage方法。

Handler内存共享如何保证数据的安全

  • 这里就要说到一个新的角色ThreadLocal,ThreadLocal中有一个静态内部类ThreadLocalMap,他为每个线程都维护一个table数组,其中通过int i = firstKey.threadLocalHashCode & (INITIAL_CAPACITY - 1);int i = key.threadLocalHashCode & (len-1);产生一个ThreadId作为key,value就是我们发出的消息。 如果对ThreadLocal感兴趣可以看看这篇文章 ThreadLocal

Handler如何存取消息

  • MessageQueue.enqueueMessage()向消息队列添加消息,MessageQueue.next()从消息队列里取消息。
  • 由此可以看出使用了生产者消费者模式,并且还有延迟消息的添加, 就像链表一样在给消息进行重排序。

今天就先写到这明天继续?

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Handler是什么
  • Handler的是如何实现内存共享的
  • 从源码理解Handler
  • Handler内存共享如何保证数据的安全
  • Handler如何存取消息
  • 今天就先写到这明天继续?
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档