首先,对Message类不够了解的TX请先看下面Blog
http://blog.csdn.net/lilu_leo/article/details/8169884
我重点说一下两个方法
public static Message obtain() {
synchronized (sPoolSync) {
if (sPool != null) {
Message m = sPool;
sPool = m.next;
m.next = null;
sPoolSize--;
return m;
}
}
return new Message();
}
public void recycle() {
clearForRecycle();
synchronized (sPoolSync) {
if (sPoolSize < MAX_POOL_SIZE) {
next = sPool;
sPool = this;
sPoolSize++;
}
}
}
Message 有两个比较重要的静态属性,sPool与sPoolSize。sPool指向Message链表的头,sPoolSize表示当前链表的Message对象个数。
当sPoolSize为0时,Message message=new Message();message.recycle();会发生什么呢?
首先sPool为null,next指向sPool。如图
然后spool指向this
继续Message message=new Message();message.recycle();则变为
执行代码 Message message=Message.obtain();则变为