可以看到,如何sPool对象为null,则new一个Message对象;如果不为空,就把sPool的第一个节点对象返回,然后把sPool指向下一个节点。那么sPool到底是什么呢???其实他就是一个Message链表,每个Message里都有一个next字段,类型也是Message对象。
到这里也看到了Message对象的获取方式分为两种情况
**总结:**
如果sPool为null,则直接通过new来获取
如果sPool不为null,则将sPool的第一个节点返回,然后把sPool指向其下一个节点
那么这里又有一个问题,sPool是什么时候生成和赋值的,什么时候向sPool池中添加Message对象的呢?接下来我们通过源码定位到了recycleUnchecked()这个方法,这个方法又是在recycle()方法中调用的
[]( )源码解析recycle()和recycleUnchecked()方法
------------------------------------------------------------------------------------------------
public void recycle() {
//判断当前message是否可以被回收(是否正在被使用)
if (isInUse()) {
if (gCheckRecycle) {
throw new IllegalStateException("This message cannot be recycled because it "
+ "is still in use.");
}
return;
}
//当前mess