获取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. Elixir日常观察 VOL.1
  2. 关于dbutils中QueryRunner看批量删除语句batch
  3. centos禁用exec_centos-php用exec执行Linux命令时,返回127错误码
  4. [新思路]Online DVD Rental! 美国在线DVD租赁
  5. vs2017创建外部css,webpack - 从生成的Microsoft SPA模板VS2017 webpack中删除特定供应商css - 堆栈内存溢出...
  6. 聊天机器人mysql数据_自己动手开发智能聊天机器人完全指南(附完整源码)
  7. 使用minikube在windows构建kubernetes群集
  8. 防爆技术在工业电子秤中的最新应用(转)
  9. 模型算法_详解SVM模型之SMO算法
  10. jackson set properties to default value (取消让jackson 赋予默认值)
  11. maven 项目搭建
  12. # 研究杂感 × VOSviewer(第六辑)
  13. Unity 3D模型展示之场景更换背景
  14. 计算机表格复制粘贴,在Excel同一个工作表中,如何复制表格格式(excel表格粘贴复制技巧)...
  15. java调用python实现校验一串字符串是否为单词
  16. 昼夜系统-游戏中的时间
  17. php doctrine,PHP和Doctrine:如何创建唯一ID
  18. 计算机数字键盘无法输入数字,电脑数字键打不出数字怎么办?电脑数字键打不出数字的修复方法...
  19. Lens Shading成因及相关
  20. 密码爆破工具——九头蛇(hydra)

热门文章

  1. SqlServer 备份还原
  2. java斐波那契数列兔子_Java 兔子问题(斐波那契数列)扩展篇
  3. 九八k用计算机打出来的音乐,背景音乐大全
  4. 计算机本地连接怎么找不到了,电脑本地连接不见了该怎么办
  5. 【华为云·云筑2020】DevCloud考卷答案
  6. android 热补丁工具,Hotfix补丁工具报错排查步骤
  7. 「详解」torch.nn.Fold和torch.nn.Unfold操作
  8. 2021.11.20【读书笔记】|差异可变剪接事件及DTU分析
  9. Lambda拉姆达表达式
  10. 使用matlab产生LED灯闪烁代码在普中板子中实验