获取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相关推荐

  1. Handler基本使用(二)new Message 、 Handler.obtainMessage和Message.obtain

    通常使用handler发送信息时,会使用下面两种方式 //方法1Message msg = new Message();msg.what = 1;msg.arg1 = 2;msg.arg2 = 3;m ...

  2. Android Message和obtainMessage的区别

    Android Message和obtainMessage的区别 类概述 定义一个包含任意类型的描述数据对象,此对象可以发送给Handler.对象包含两个额外的int字段和一个额外的对象字段,这样可以 ...

  3. Android Message 及其使用

    一.线程间通讯的Message机制 1.Message介绍 frameworks\base\core\java\android\Os\Message.java Message是线程之间传递信息的载体, ...

  4. 关于在用异步消息处理机制使用Message.Obtain()方法(而非New Message)获得一个Message对象的好处

    类概述 定义一个包含任意类型的描述数据对象,此对象可以发送给Handler.对象包含两个额外的int字段和一个额外的对象字段,这样可以使得在很多情况下不用做分配工作. 尽管Message的构造器是公开 ...

  5. Android 中Message,MessageQueue,Looper,Handler详解+实例

    一.几个关键概念 1.MessageQueue:是一种数据结构,见名知义,就是一个消息队列,存放消息的地方.每一个线程最多只可以拥有一个MessageQueue数据结构. 创建一个线程的时候,并不会自 ...

  6. Android进阶_Handler和Handler.Callback和Message

    最近得病了,看到代码黄色警报不是很爽.虽然不影响运行,但是看着代码不干净不利索. Handler,线程通信,用的比较多吧,今天写代码一如往常的: private Handler smsHandler ...

  7. 【Android 异步操作】手写 Handler ( 总结 | Message | MessageQueue | Looper | Handler ) ★

    文章目录 一.Message 消息 二.Handler 消息处理者 三.MessageQueue 消息队列 四.Looper 循环者 五.关于 Looper 线程本地变量的说明 一.Message 消 ...

  8. android message 代码,Android Handler移除Message详解及实例代码

    Android Handler移除Message详解 问题: 1.removeMessage(what)函数是否只能移除对应what值的Message? 2.对于Delayed发送的Message,能 ...

  9. Android handler.obtainMessage()传字符串用法

    1.使用Thread线程实现Runnable的方式 public class MainActivity extends Activity implements Runnable {private Te ...

  10. Android–多线程之Handler下载图片源码

    Android的消息传递机制是另外一种形式的"事件处理",这种机制主要是为了解决Android应用中多线程的问题,在Android中不允许Activity新启动的线程访问该Acti ...

最新文章

  1. 用Async函数简化异步代码
  2. php 5.6 mcrypt,php-mcrypt 在PHP5.60+的版本中怎么使用?
  3. windows快捷启动命令
  4. Linux网络服务:Samba服务与实现
  5. c语言 switch语句大小,C语言switch语句(板式整齐)
  6. 深度学习和目标检测系列教程 18-300:关于yolo、voc格式标签转化问题
  7. java从外部得到数据_java – 如何实现Observer以从侦听器获取数据?
  8. 希望查询windows下安装cygwin后ssh服务无法启动的解决办法
  9. 50行代码实现3D模拟真实撒金币动效
  10. 风变Python 15数据的读入以及写出以及数据的编码类型
  11. C#中string[]数组和liststring泛型的相互转换 【转】
  12. 建立云服务器_中国云游戏元年 顺网科技跻身头号玩家队列
  13. Springmvc源码分析之dispatcherServlet
  14. 不用在PLC内编程,快速实现西门子与欧姆龙、三菱等品牌的PLC之间实时通讯
  15. android caj转word,caj转换成word的方法(亲测有效的方法)
  16. ChinaSkills-网络系统管理001(网络应用赛项改革)
  17. 程序猿---北京骑行天津~~~~
  18. Android手机无法上网怎么办,Android手机的WIFI连接上了却不能上网是怎么回事如何解决...
  19. 你的电脑/设备需要恢复 错误码0xc000014c
  20. 有道云笔记如何修改全局默认字体样式

热门文章

  1. html语言判断水仙花数,水仙花数判断讲解
  2. 几点关于STM32CubeProgrammer的内容
  3. Arrayfire E0992 命令行错误: 宏定义无效: AF_<CPU/CUDA/OPENCL>
  4. AcWing 1183电力(Tarjan求割点)
  5. Android 开发佳站3
  6. php 504网关,php出现504错误的原因是什么
  7. python 判断数字是奇数还是偶数
  8. python基础----Day06
  9. 新蓝天羽网体育用品商店
  10. Linux课程设计报告【全集】