Android中Message对象复用原理

  • 时间:
  • 浏览:1

加上到复用池事先 ,会先将Message中的数据清空.

.我.我 在代码中,被建议(网上肯能前辈或看注释)用以下的措施来使用 Message,我希望被告知,另有一个会提高性能.

从代码中可否 看出, Message中,将 private static final Object sPoolSync = new Object();作为锁标志,来起到类锁的作用.

下面.我.我 来看它是要怎样实现高效的.

静态变量属于类变量,内存中只会居于一份引用,正好能起到 头结点的作用

Message将自身作为节点, 使用有一个静态变量作为头结点,让Message自身形成有一个链表,而链表中存的是 肯能清空数据的Message对象, 以类似于措施起到复用的效果!

从顶端的分析,.我.我 来梳理一下整体的流程思想.

Message能提高传输带宽的由于 是,将使用完的Message清除附带的数据后,加上到复用池中,.我.我 须要使用它时,直接在复用池中取出对象使用,而不须要重新new创建对象. 而复用池本质上却说有一个单向链表,为了更好的理解,Message复用池的实现,.我.我 先来看下,简单的单向链表实现.

嗯! 根据官方的文档,另有一个觉得要能提高性能,将外理在大多数情形下创建新的对象!

Message 在Android中主却说在 消息循环机制 中使用,即配合 Handler,LooperMessageQueue来进行线程切换,线程间传递数据;

以及配合Handler在IPC中传递数据; 这里不对哪几种进行展开,它全是.我.我 关注的重点.

150个肯能是考虑到内存开销和时间开销的平衡, 全是将数据无限制的加上到复用池.

从复用池中获取Message外理了 new创建的消耗.

这里有个问题报告 , 为什么么不直接使用类锁来加锁呢? 使用上诉措施,反而须要new有一个Object对象,全是增加开销吗?

顶端实现了单向链表的插入头部,和移除头部功能.

相信.我.我 ,对类似于单向链表的实现,都十分熟悉,这里不再全版讲解,肯能看不懂,请自行复习数据社会形态相关知识点.

下面.我.我 带着顶端的知识,来看Message中源码的实现.

有答案的同学, 欢迎在评论区中指出!

它能起到类锁的作用是肯能,static修饰的变量在类加载的初始化阶段就将被创建,final使得引用不可改变,从而达到 内存独一份的效果,进而起到和类锁同样的作用.