类概述
定义一个包含任意类型的描述数据对象,此对象能够发送给Handler。对象包含两个额外的int字段和一个额外的对象字段,这样可使得在不少状况下不用作分配工做。java
尽管Message的构造器是公开的,可是获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(), 这样是从一个可回收对象池中获取Message对象。android
一、首先建立Handler对象:
- private Handler mHandler = new Handler() {
-
- public void handleMessage(android.os.Message msg) {
- switch (msg.what) {
- case 1:
- textShowTV.setText("展现中...");
- break;
- }
- };
-
- };
二、而后是消息处理:
-
-
- Message mess = Message.obtain();
- mess.what =1;
-
- mHandler.sendMessage(mess);
经过比较咱们会发现,这两种获取Message的实例的方法不同,因而我看了源码,果真不同:
进入obtain方法:
图1:
进入Message方法:
图2:
查看obtainMessage()源码:
图3:
查看Message.obtain(this, what) 源码:
图4:
而后,再次点击obtain() 方法,代码又回归到了图1
总结:
上面的图1中obtain方法的注释中说得很明白:从整个Messge池中返回一个新的Message实例,在许多状况下使用它,由于它能避免分配新的对象
若是是这人的话,那么经过调用obtainMessage方法获取Message对象就能避免建立对象,从而减小内存的开销了。
note:转自http://blog.csdn.net/duqiuke/article/details/39577413