1,MessageQueue與Message的關係
Message中文是訊息,及線程處理的最小單元,裡面帶有處理的資料集,或還帶有操作,及告訴目的地要做什麼事情, 每個MessageQueue裡包含有Message。每個Message不是直接插入到MessageQueue裡的,而是通過MessageQueue.IdleHandler 與looper一起工作,把Message放到MessageQueue裡,及addIdleHandler(MessageQueue.IdleHandler handler) 和removeIdleHandler(MessageQueue.IdleHandler handler) 方法,把MessageQueue.IdleHandler壓入到MessageQueu裡。
2,Thread和HandlerThread的關係
HandlerThread就是帶有Looper迴圈的Thread.
3,Looper介紹
Looper即一個迴圈,必須綁定到一個固定的線程裡,通過getThread()方法可以獲得該looper綁定的Thread對象,通過getMainLooper()獲得主線程裡的looper對象,myLooper()可以獲得當前線程裡的looper對象,通過myQueue()方法可以獲得當前線程裡的messageQueue對象。
4,Thread、HandlerThread、和Looper的關係的關係
一般聲明一個thread是沒有帶looper迴圈的,但是可以通過Looper.prepare()方法給一個線程加上looper;Looper.loop()執行該looper綁定的線程裡的messageQueue,直到該loopger結束;Loop.quit()結束該迴圈,執行個體代碼如下:
class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { // process incoming messages here } }; Looper.loop(); } }
幸好android為我們提供了一個直接產生帶有looper線程的方法,及執行個體化一個HandlerThread對象,通過HandlerThread.getLooper()方法即可獲得該HandlerThread的looper對象。
5,Handler和Thread HandlerThread Looper Message MessageQueue的關係
Handler類是用來發送和處理訊息/Runnable的類,一個Handler類與唯一的一個線程關聯,並且該線程是產生該Handler的線程,
它把訊息發送到該產生它的線程裡的MessageQueue裡,然後當Message出隊列的時候,就執行該訊息。
post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long),是用來處理runnable對象的;
sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long), and sendMessageDelayed(Message, long)方法是
用來處理Message對象,一般是立即執行的,但是我們是可以設定時延,還可以迴圈執行。
可以通過handleMessage (Message msg) 方法來接收訊息。
執行個體化:Handler(Looper looper)