我们一般创建message是这么创建的
Message msg = new Message();
但是这样创建message可以减少内存开销
Message msg = handler.obtainMessage();
为什么会这样呢?我们来看看源码,关键源码如下:
//普通的实例化方法
public Message(){}
//obtainMessages实例化方法
public final Message obtainMessage(){
return Message.obtain(this);
}
public static Message obtain(Handler h){
Message m=obtain();
m.target=h;
return m;
}
public static Message obtain(){
synchronized(sPoolSync){
Message m=sPool;
sPool=m.next;
m.next=null;
sPoolSize--;
return m;
}
return new Message();
}
总结:
上面源码中说得很明白:从整个Messge池中返回一个新的Message实例,在许多情况下使用它,因为它能避免分配新的对象
如果是这人的话,那么通过调用obtainMessage方法获取Message对象就能避免创建对象,从而减少内存的开销了。
网友评论