handler.obtainMessage()

Android 码拜 9年前 (2016-03-22) 1190次浏览
用过Handler的人都知道,Message有两种获取方法
Message msg = new Message();

Message msg = handler.obtainMessage();
这两种方法的区别是,前者是new的,需要开辟内存空间;后者是从global Message pool中取,性能消耗相对少;
本人想问的是,global Message pool的概念?
本人在程序中并没有创建过Message,可以使用obtainMessage()方法来获取Message对象吗?假如可以,那这个取到的Message是哪儿来的?
使用obtainMessage()既然没有new,那么本人obtainMessage得到的Message就可能是同一个,假如线程A通过handler.obtainMessage()得到了message,并且把相关属性赋值了,然后通过sendMessage加入到主线程中,主线程正要去取这个message里的相关信息,还没取,线程A由于运行频率较高又get了一遍,又赋上了新值.
或还有一个线程,线程B也get,也赋值了一遍.
那么你的主线程数据就完全乱套了.
解决方案

40

obtain方法里边不是用到同步锁了吗?所以不会乱吧?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明handler.obtainMessage()
喜欢 (0)
[1034331897@qq.com]
分享 (0)