android Thread HandlerThread Looper Message MessageQueue Handler的關係

來源:互聯網
上載者:User

       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) 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.