android-Message.obtain和handler.obtainMessage

获取message的方法:

//创建message
//1、new的方式
Message message1 = new Message();
message1.what = 1;

/*  以下三种方式的本质是一样的  */

//2、Message.obtain的方式
//从整个Messge池中返回一个新的Message实例,避免创建对象,从而减少内存的开销了。
Message message2 = Message.obtain();
message2.what = 1;

//3、Handler.obtainMessage的方式
//从整个Messge池中返回一个新的Message实例,避免创建对象,从而减少内存的开销了。
Message message3 = new Handler().obtainMessage();

//从整个Messge池中返回一个新的Message实例,避免创建对象,从而减少内存的开销了。
Message message4 = new Handler().obtainMessage(1);
//what=1,同message1,message2相同

handler类:
在这里插入图片描述
message类:
在这里插入图片描述
通过查看handler类和message类可得:Message.obtain()或者Handler.obtainMessage(),本质一样。

结论:获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(), 这样是从一个可回收对象池中获取Message对象。

进入obtain方法:图一

进入Message方法:图二

查看obtainMessage()源码:图三

查看Message.obtain(this, what) 源码:图四

然后,再次点击obtain() 方法,代码又回归到了图1

总结:

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

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

参考:

Android Message.obtain() 和Handler.obtainMessage()的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值