Android Message.obtain() 和Handler.obtainMessage()的区别
来源:互联网 发布:软件模块设计 编辑:程序博客网 时间:2024/05/17 01:45
转载地址:
类概述
定义一个包含任意类型的描述数据对象,此对象可以发送给Handler。对象包含两个额外的int字段和一个额外的对象字段,这样可以使得在很多情况下不用做分配工作。
尽管Message的构造器是公开的,但是获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(), 这样是从一个可回收对象池中获取Message对象。
1、首先创建Handler对象:
- private Handler mHandler = new Handler() {
- public void handleMessage(android.os.Message msg) {
- switch (msg.what) {
- case 1:
- textShowTV.setText("展示中...");
- break;
- }
- };
- };
2、然后是消息处理:
- //①,使用new Message()
- // Message mess = new Message();
- //②,使用Message.obtain()
- Message mess = Message.obtain();
- mess.what =1;
- //mHandler.obtainMessage(1)与上两行的代码一样,可以参考源码查看
- // Message mess = mHandler.obtainMessage(1);
- mHandler.sendMessage(mess);
通过比较我们会发现,这两种获取Message的实例的方法不一样,于是我看了源码,果然不一样:
进入obtain方法:
图1:
进入Message方法:
图2:
查看obtainMessage()源码:
图3:
查看Message.obtain(this, what) 源码:
图4:
然后,再次点击obtain() 方法,代码又回归到了图1
总结:
上面的图1中obtain方法的注释中说得很明白:从整个Messge池中返回一个新的Message实例,在许多情况下使用它,因为它能避免分配新的对象
如果是这样的话,那么通过调用obtainMessage方法获取Message对象就能避免创建对象,从而减少内存的开销了。
0 0
- Message.obtain() 和Handler.obtainMessage()的区别
- Android Message.obtain() 和Handler.obtainMessage()的区别
- handler.obtainMessage()与Message.obtain()的区别
- android-Message.obtain和handler.obtainMessage
- Android Message和obtainMessage的区别
- Android Message和obtainMessage的区别
- Android Message和obtainMessage的区别
- Android Message和obtainMessage的区别
- Android中Message和obtainMessage的区别
- Android Message和obtainMessage的区别
- Android Message和obtainMessage的区别
- Android Message和obtainMessage的区别
- Android Message和obtainMessage的区别
- Android Message和obtainMessage的区别
- Handler传值方式及Message和obtainMessage的区别
- Handler 子线程new Message和obtainMessage的区别
- Handler基本使用(二)new Message 、 Handler.obtainMessage和Message.obtain
- Handler基本使用(二)new Message 、 Handler.obtainMessage和Message.obtain
- MatLab2012b/MatLab2013b分类器大全(svm,knn,随机森林等)
- task_struct结构
- 为什么仓库软件不能直接修改库存数量
- 用ON_COMMAND_RANGE实现多个事件响应同一个函数
- ContextLoaderListener的作用
- Android Message.obtain() 和Handler.obtainMessage()的区别
- Pyramid Scene Parsing Network(PSP NET)
- OpenStack落地德国大众:锐意创新还是孤注一掷?
- 【数据结构】中的红黑树-RBTree
- 手把手教Eclipse官网安装
- 关于sftp,服务器架设,上传下载
- 二叉树的前序遍历
- C++并发编程实战(读书笔记)——C++内存模型不好理解;无锁数据结构?但是等待不就是被锁住了吗??
- es6常见属性class详解