Android Message和obtainMessage的区别
2015-11-03 11:19
423 查看
类概述
定义一个包含任意类型的描述数据对象,此对象可以发送给Handler。对象包含两个额外的int字段和一个额外的对象字段,这样可以使得在很多情况下不用做分配工作。尽管Message的构造器是公开的,但是获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(), 这样是从一个可回收对象池中获取Message对象。
1、首先创建Handler对象:
[java] view plaincopyprivate Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
textShowTV.setText("展示中...");
break;
}
};
};
2、然后是消息处理:
[java] view plaincopy//①,使用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对象就能避免创建对象,从而减少内存的开销了。
from:http://blog.csdn.net/duqiuke/article/details/39577413
相关文章推荐
- Android验证手机号
- Android的系统框架的深入认识
- 解决Android Studio的Terminal窗口不能输入的问题
- Android的系统框架
- Android中的设计模式
- Android MediaRecorder录音
- android源码大放送(实战开发必备)
- (仿360卸载后弹窗)Android卸载程序之后跳转到指定的反馈页面
- Android常用的编码操作规范
- android中drawable与bitmap的相互转化
- android 布局之滑动探究 scrollTo 和 scrollBy 方法使用说明
- Android 自动弹出\关闭软键盘
- 【有人@我】Android中高亮变色显示文本中的关键字
- 【有人@我】Android中高亮变色显示文本中的关键字
- android:评分条RatingBar
- Android开发之如何保证Service不被杀掉
- Android实战技巧之四十四:Hello,Native!
- android之Picasso加载图片用法以及Transformation自定义加载图片
- 美团Android DEX自动拆包及动态加载简介
- 在不同的Activity之间传递数据--摘自《android开发权威指南.pdf》