注意,本文基于Android9.0源码
一、概述
Message是一个实现了Parcelable的可序列化通讯类,常应用于线程间和进程间通讯,我们可以把它看作消息的载体,从字面意思上也是这样体现的;其内部实现了一个message对象的复用池,可以有效地解决在高并发情况下的内存抖动问题,池的大小默认设置为50,当大于临界值时则会被抛弃不再复用,其内部使用链表的数据结构来实现,
基于Message的复用原理,我们一般通过Message的obtain方法来生成一个实例
|
|
二、字段解析
|
|
三、对象池原理
静态变量sPool指向对象池的表头,next指向链表的下一个message
- 对象获取,从链中取出及断链
|
|
- 对象回收,将对象放入常量池
|
|
- 内存抖动
内存频繁的分配和回收,频繁的gc会导致UI卡顿,严重的时候导致out of memory error(内存超过分配的最大值)