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()的区别
android-Message.obtain和handler.obtainMessage相关推荐
- Handler基本使用(二)new Message 、 Handler.obtainMessage和Message.obtain
通常使用handler发送信息时,会使用下面两种方式 //方法1Message msg = new Message();msg.what = 1;msg.arg1 = 2;msg.arg2 = 3;m ...
- Android Message和obtainMessage的区别
Android Message和obtainMessage的区别 类概述 定义一个包含任意类型的描述数据对象,此对象可以发送给Handler.对象包含两个额外的int字段和一个额外的对象字段,这样可以 ...
- Android Message 及其使用
一.线程间通讯的Message机制 1.Message介绍 frameworks\base\core\java\android\Os\Message.java Message是线程之间传递信息的载体, ...
- 关于在用异步消息处理机制使用Message.Obtain()方法(而非New Message)获得一个Message对象的好处
类概述 定义一个包含任意类型的描述数据对象,此对象可以发送给Handler.对象包含两个额外的int字段和一个额外的对象字段,这样可以使得在很多情况下不用做分配工作. 尽管Message的构造器是公开 ...
- Android 中Message,MessageQueue,Looper,Handler详解+实例
一.几个关键概念 1.MessageQueue:是一种数据结构,见名知义,就是一个消息队列,存放消息的地方.每一个线程最多只可以拥有一个MessageQueue数据结构. 创建一个线程的时候,并不会自 ...
- Android进阶_Handler和Handler.Callback和Message
最近得病了,看到代码黄色警报不是很爽.虽然不影响运行,但是看着代码不干净不利索. Handler,线程通信,用的比较多吧,今天写代码一如往常的: private Handler smsHandler ...
- 【Android 异步操作】手写 Handler ( 总结 | Message | MessageQueue | Looper | Handler ) ★
文章目录 一.Message 消息 二.Handler 消息处理者 三.MessageQueue 消息队列 四.Looper 循环者 五.关于 Looper 线程本地变量的说明 一.Message 消 ...
- android message 代码,Android Handler移除Message详解及实例代码
Android Handler移除Message详解 问题: 1.removeMessage(what)函数是否只能移除对应what值的Message? 2.对于Delayed发送的Message,能 ...
- Android handler.obtainMessage()传字符串用法
1.使用Thread线程实现Runnable的方式 public class MainActivity extends Activity implements Runnable {private Te ...
- Android–多线程之Handler下载图片源码
Android的消息传递机制是另外一种形式的"事件处理",这种机制主要是为了解决Android应用中多线程的问题,在Android中不允许Activity新启动的线程访问该Acti ...
最新文章
- 用Async函数简化异步代码
- php 5.6 mcrypt,php-mcrypt 在PHP5.60+的版本中怎么使用?
- windows快捷启动命令
- Linux网络服务:Samba服务与实现
- c语言 switch语句大小,C语言switch语句(板式整齐)
- 深度学习和目标检测系列教程 18-300:关于yolo、voc格式标签转化问题
- java从外部得到数据_java – 如何实现Observer以从侦听器获取数据?
- 希望查询windows下安装cygwin后ssh服务无法启动的解决办法
- 50行代码实现3D模拟真实撒金币动效
- 风变Python 15数据的读入以及写出以及数据的编码类型
- C#中string[]数组和liststring泛型的相互转换 【转】
- 建立云服务器_中国云游戏元年 顺网科技跻身头号玩家队列
- Springmvc源码分析之dispatcherServlet
- 不用在PLC内编程,快速实现西门子与欧姆龙、三菱等品牌的PLC之间实时通讯
- android caj转word,caj转换成word的方法(亲测有效的方法)
- ChinaSkills-网络系统管理001(网络应用赛项改革)
- 程序猿---北京骑行天津~~~~
- Android手机无法上网怎么办,Android手机的WIFI连接上了却不能上网是怎么回事如何解决...
- 你的电脑/设备需要恢复 错误码0xc000014c
- 有道云笔记如何修改全局默认字体样式