Android 訊息機制 - Handler 實現原理深入剖析
Android 的訊息機制Handler,是在開發過程中都會用到的,它可以輕鬆的從子執行緒切換到主執行緒,大部分的時候我們將Handler會用在更新UI的操作.那麼Handler是如何做到不同執行緒通訊的呢? 如何切換執行緒的呢?本篇文章帶領大家來輕鬆的實現一個Handler,並深入的去了解Handler的實現原理
在講解之前,我們先來了解一下Handler的工作過程,至於如何使用Handler,這裡我就不在複述了,只要做過Android開發我相信大家都會使用.
Handler的工作過程
Handler傳送訊息是通過Looper以及MessageQueue協同工作的.
Looper的初始化:在應用啟動時ActivityThread會建立一個Looper.prepare()
,並呼叫Looper.looper()
方法無限迴圈等待是否有新的訊息.
傳送訊息:通過Handler的send方法傳送訊息,會呼叫MessageQueue.enqueue()
方法,此時訊息(Message)會被加入MessageQueue訊息佇列中,已知在Looper初始化是,Looper.looper()
一直在監聽是否存在新的訊息,此時Looper發現有新訊息到來,就會處理該訊息,最終會呼叫Handler.handleMessage()
方法,Looper是執行在建立Handler的執行緒中的,handleMessage
一定在建立Handler的執行緒中去執行.