android中的消息機制片任,一般是通過三個概念來理解的:MessageQueue(消息隊列)逗概,Handler夺克,Looper箕宙。我們知道在安卓中通過子線程是不能更新UI的,如果想在子線程中更新界面的話铺纽,只能向主線程中發(fā)送消息通知主線程更新界面柬帕,而消息機制就是在這個背景下產(chǎn)生的。
在Handler源碼中我們可以看到狡门,是依賴MessageQueue和Looper兩個對象
1.當我們需要使用Handler的時候首先要調(diào)用Looper.prepare()方法
此時會在sThreadLocal中保存一個當前線程的Looper實例陷寝,這個實例在接下來的Handler中會使用到
2.以下是創(chuàng)建Handler的源碼
通過以上代碼我們可以看到,首先會獲取一個Looper對象其馏,然后進入到myLooper()方法中
當使用get()方法的時候會獲取到剛剛我們設(shè)置的Looper對象盼铁。
3.使用創(chuàng)建好的Handler對象發(fā)送消息。不管是使用handler.sendMessage或者post等方法尝偎,最終會走到以下方法
該方法最終會將消息添加到消息隊列中饶火。消息是添加到隊列中了,但是我們?nèi)绾稳カ@取數(shù)據(jù)呢致扯?