說到Handler就會被問到Handler、Message、Looper之間的關(guān)系了。那么Handler為什么要出現(xiàn)呢,它的作用是什么?
1.Handler的作用
Android是單線程模型的操作系統(tǒng)。為了避免多線程更新UI出現(xiàn)混亂,出現(xiàn)線程不安全,在Android中只能使用主線程(UI線程)更新UI,那么子線程和UI線程之間的通信怎么通信呢?Handler就是為了解決這個問題的。
2.Handler、Message、Looper之間的關(guān)系
Handler:消息處理者負責發(fā)送消息和消息內(nèi)容的處理。sendMessage和handleMessage方法</br>
Message:消息對象,信息的攜帶者。</br>
Looper:它是消息的載體,Looper.loop()是一個死循環(huán),會不斷的從消息隊列中取出消息。如果有消息就會處理,否則會阻塞。</br>
MessageQueue:用來存放Handler發(fā)送的消息的消息隊列(雙向鏈表結(jié)構(gòu))。</br>
從源碼的角度來說,我們通過Handler發(fā)送Message到MessageQueue,MessageQueue調(diào)用enqueueMessage方法向消息隊列中插入一條消息。Looper會不停的輪詢Message,它是一個阻塞式死循環(huán),當發(fā)現(xiàn)有消息的時候,會調(diào)用dispatchMessage方法分發(fā)給Handler,Handler通過handlerMessage進行處理這些消息。