关于在用异步消息处理机制使用Message.Obtain()方法(而非New Message)获得一个Message对象的好处
生活随笔
收集整理的這篇文章主要介紹了
关于在用异步消息处理机制使用Message.Obtain()方法(而非New Message)获得一个Message对象的好处
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
類概述
定義一個包含任意類型的描述數(shù)據(jù)對象,此對象可以發(fā)送給Handler。對象包含兩個額外的int字段和一個額外的對象字段,這樣可以使得在很多情況下不用做分配工作。
盡管Message的構(gòu)造器是公開的,但是獲取Message對象的最好方法是調(diào)用Message.obtain()或者Handler.obtainMessage(), 這樣是從一個可回收對象池中獲取Message對象。
1、首先創(chuàng)建Handler對象:
[java]?view plaincopy2、然后是消息處理:
[java]?view plaincopy通過比較我們會發(fā)現(xiàn),這兩種獲取Message的實(shí)例的方法不一樣,于是我看了源碼,果然不一樣:
進(jìn)入obtain方法:
圖1:進(jìn)入Message方法:
圖2:
查看obtainMessage()源碼:
圖3:查看Message.obtain(this, what) 源碼:
圖4:然后,再次點(diǎn)擊obtain() 方法,代碼又回歸到了圖1
總結(jié):
上面的圖1中obtain方法的注釋中說得很明白:從整個Messge池中返回一個新的Message實(shí)例,在許多情況下使用它,因?yàn)樗鼙苊夥峙湫碌膶ο? 如果是這樣的話,那么通過調(diào)用obtainMessage方法獲取Message對象就能避免創(chuàng)建對象,從而減少內(nèi)存的開銷了。總結(jié)
以上是生活随笔為你收集整理的关于在用异步消息处理机制使用Message.Obtain()方法(而非New Message)获得一个Message对象的好处的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过Daffodil for VS使VS
- 下一篇: 计算机服务中无spool,打印服务SPO