類概述
定義一個包含任意類型的描述數據對象,此對象可以發送給Handler。對象包含兩個額外的int字段和一個額外的對象字段,這樣可以使得在很多情況下不用做分配工作。
盡管Message的構造器是公開的,但是獲取Message對象的最好方法是調用Message.obtain()或者Handler.obtainMessage(), 這樣是從一個可回收對象池中獲取Message對象。
1、首先創建Handler對象:
2、然后是消息處理:
通過比較我們會發現,這兩種獲取Message的實例的方法不一樣,于是我看了源碼,果然不一樣:
進入obtain方法:
圖1:
進入Message方法:
圖2:
然后,再次點擊obtain() 方法,代碼又回歸到了圖1
總結:
上面的圖1中obtain方法的注釋中說得很明白:從整個Messge池中返回一個新的Message實例,在許多情況下使用它,因為它能避免分配新的對象
如果是這樣的話,那么通過調用obtainMessage方法獲取Message對象就能避免創建對象,從而減少內存的開銷了。