您的位置:首页 > 移动开发 > Android开发

Android Message和obtainMessage的区别

2015-11-03 11:19 423 查看

类概述

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

尽管Message的构造器是公开的,但是获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(), 这样是从一个可回收对象池中获取Message对象。

1、首先创建Handler对象:

[java] view plaincopy





private 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: