sendMessage 與 obtainMessage (sendToTarget)比較

咱們平時在作到多線程問題的時候可能利用Handler去傳遞Message,其中,常用的就是
一、new Handler().obtainMessage().sendToTarget();
二、new Handler().sendMessage(new Message());
第一種是直接傳遞what,obj等,msg的一些數據,第二種是初始化一個msg,而後賦值msg的一些數據,以Message的對象去send,在使用上這兩種均可以實現需求,那麼這兩種有什麼區別呢?

等同於obtain()方法,返回了一個帶target標誌的Message,就是給Message打上Handler的標誌,好區分的意思,沒別的意思,主要就是obtain()方法,以下多線程


 
image.png

就如同最開始說的那樣從MessagePool 返回一個新的Message實例,避免分配新對象,省去了建立對象申請內存的開銷。。。。。
 
image.png

獲得了Message後,調用了sendToTarget(),,裏面調用了sendMessage(),這就是和方法二同樣的了, new Handler().sendMessage(new Message());
總結下就是說利用obtainMessage().sendToTarget()是從MessagePool 返回一個新的Message實例能夠避免咱們去建立Message對象申請內存開銷。線程

 

https://www.jianshu.com/p/f74b91c6733borm

相關文章
相關標籤/搜索