Message msg =new Message 与 obtainMessage区别
//代码1
Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
}
};
第一种得到msg方法
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);
第二种得到msg方法
Message msg = handler.obtainMessage();
msg.what =1;
msg.arg1=1;
handler.sendMessage(msg);
两种方法得到的msg有什么区别呢
答:通过obtainMessage得到的msg不会产生额外的内存开销。
message是创建一个新的msg实例,开辟新的内存。
查看obtainMessage()源码:
图1:
进入obtain方法:
图2:
再进入obtain方法:
图3:
进入Message方法:
图4:
总结:
上面的图3中obtain方法的注释中说得很明白:从整个Messge池中返回一个新的Message实例,在许多情况下使用它,因为它能避免分配新的对象
如果是这样的话,那么通过调用obtainMessage方法获取Message对象就能避免创建对象,从而减少内存的开销了。
转载于:https://blog.51cto.com/8675042/1716468