一、摘要
Handle是我们项目中经常去运用的一项处理异步消息的方式,而创建消息的时候,使用不当会导致不必要的对象创建
二、背景
发送多条消息时会造成内存增大,效率低下
三、推广建议
创建消息,使用Handler.obtain,不用new Message
四、正文
1、跟踪Message.java中的obtain()方法如下:
private static final Object sPoolSync = new Object();
private static Message sPool;
private static int sPoolSize = 0;
private static final int MAX_POOL_SIZE = 10;
/**
* Return a new Message instance from the global pool. Allows us to
* avoid allocating new objects in many cases.
*/
public static Message obtain() {
synchronized (sPoolSync) {
if (sPool != null) {
Message m = sPool;
sPool = m.next;
m.next = null;
sPoolSize--;
return m;
}
}
return new Message();
}
从obtain()的源代码中我们可以知道,它是静态方法,而且只有在spool = null 的情况下才会new出一个Message(),返回一个Message对象,如果在不为空的情况下,Message的对象都是从Message对象池里面拿的实例从而重复使用的,这也为了An