Android开发经验谈Android开发

sendMessage 与 obtainMessage (sen

2018-08-20  本文已影响7人  忘尘And

我们平时在做到多线程问题的时候可能利用Handler去传递Message,其中,经常使用的就是
1、new Handler().obtainMessage().sendToTarget();
2、new Handler().sendMessage(new Message());
第一种是直接传递what,obj等,msg的一些数据,第二种是初始化一个msg,然后赋值msg的一些数据,以Message的对象去send,在使用上这两种都可以实现需求,那么这两种有什么区别呢?废话不多说,直接源码走起:
先看第一种:

image.png

注意看注释,返回了一个来自消息池的Message对象,也就是说Message.obtain返回的是一个消息池的msg对象,那么做了什么呢,继续跟


image.png

看看注释,就是说等同于obtain()方法,返回了一个带target标志的Message,就是给Message打上Handler的标志,好区分的意思,没别的意思,主要就是obtain()方法,如下


image.png
就如同最开始说的那样从MessagePool 返回一个新的Message实例,避免分配新对象,省去了创建对象申请内存的开销。。。。。 image.png

得到了Message后,调用了sendToTarget(),,里面调用了sendMessage(),这就是和方法二一样的了, new Handler().sendMessage(new Message());
总结下就是说利用obtainMessage().sendToTarget()是从MessagePool 返回一个新的Message实例可以避免我们去创建Message对象申请内存开销。ok,分析完毕,如果有说的不对或者不合适的欢迎指出。

上一篇下一篇

猜你喜欢

热点阅读