類概述
定義一個包含任意類型的描述數據對象,此對象能夠發送給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