[轉]Android Message.obtain() 和Handler.obtainMessage()的區別

來源:互聯網
上載者:User

標籤:

    

目錄(?)[+]

 參考:http://www.2cto.com/kf/201311/255885.htmlhttp://www.cnblogs.com/over140/archive/2011/06/24/2088637.html  

    

 

 

類概述

 

定義一個包含任意類型的描述資料對象,此對象可以發送給Handler。對象包含兩個額外的int欄位和一個額外的對象欄位,這樣可以使得在很多情況下不用做分配工作。

儘管Message的構造器是公開的,但是擷取Message對象的最好方法是調用Message.obtain()或者Handler.obtainMessage(), 這樣是從一個可回收對象池中擷取Message對象。

 1、首先建立Handler對象: [java] view plaincopy 
  1. private Handler mHandler = new Handler() {  
  2.   
  3.         public void handleMessage(android.os.Message msg) {  
  4.             switch (msg.what) {  
  5.             case 1:  
  6.                 textShowTV.setText("展示中...");  
  7.                 break;  
  8.             }  
  9.         };  
  10.           
  11.     };  
 2、然後是訊息處理: [java] view plaincopy 
  1.             //①,使用new Message()  
  2. //          Message mess = new Message();  
  3.             //②,使用Message.obtain()  
  4.             Message mess = Message.obtain();  
  5.             mess.what =1;  
  6.             //mHandler.obtainMessage(1)與上兩行的代碼一樣,可以參考源碼查看  
  7. //          Message mess = mHandler.obtainMessage(1);  
  8.             mHandler.sendMessage(mess);  


 通過比較我們會發現,這兩種擷取Message的執行個體的方法不一樣,於是我看了源碼,果然不一樣: 進入obtain方法: 圖1: 進入Message方法: 圖2:  查看obtainMessage()源碼: 圖3:    查看Message.obtain(this, what) 源碼:圖4: 然後,再次點擊obtain() 方法,代碼又迴歸到了圖1 總結: 上面的圖1中obtain方法的注釋中說得很明白:從整個Messge池中返回一個新的Message執行個體,在許多情況下使用它,因為它能避免分配新的對象 如果是這樣的話,那麼通過調用obtainMessage方法擷取Message對象就能避免建立對象,從而減少記憶體的開銷了。

[轉]Android Message.obtain() 和Handler.obtainMessage()的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.