android-Message.obtain和handler.obtainMessage

xiaoxiao2021-02-28  169

获取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()的区别

转载请注明原文地址: https://www.6miu.com/read-22523.html

最新回复(0)