//代码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:

20131107020144754.jpg

   

进入obtain方法:

 

图2:

20131107020201912.jpg

 

再进入obtain方法:


图3:

 

20131107020215580.jpg

进入Message方法:

图4:

20131107020231691.jpg

 

 

总结:

上面的图3中obtain方法的注释中说得很明白:从整个Messge池中返回一个新的Message实例,在许多情况下使用它,因为它能避免分配新的对象

如果是这样的话,那么通过调用obtainMessage方法获取Message对象就能避免创建对象,从而减少内存的开销了。