Android中Looper的實現原理,為什麼調用Looper.prepare()就在當前線程關聯了一個Looper對象,它是如何?的。

來源:互聯網
上載者:User

標籤:

1、線程間通訊機制首先,looper、handler、messagequeue三者共同實現了android系統裡線程間通訊機制。如在A、B兩個子線程之間需要傳遞訊息,首先給每個子線程綁定一套handler、looper、messagequeue機制,然後這三個對象都與其所屬線程對應。然後A線程通過調用B線程的Handler對象,發送訊息。這個訊息會被Handler發送到B線程的messagequeue中,而屬於B線程的Looper對象一直在for迴圈裡無限遍曆MessageQueue, 一旦發現該訊息佇列裡收到了新的訊息,就會去對訊息進行處理,處理過程中會回調自身Handler的heandleMessage方法。從而實現了不同線程間通訊。2、Looper實現原理Looper類裡包含一個訊息佇列對象和一個線程對象。當建立Looper時,會自動建立一個訊息佇列,同時將內部線程對象指向建立Looper的線程。當開啟Looper後(looper.loop()),會自動進入無限for迴圈中,不斷去遍曆訊息佇列,如果沒有訊息則阻塞,有訊息則回調handler的handlemessage方法進行處理。3、Looper.prepare()首先,要使用Looper機制一般會在當前線程中建立Handler對象,裡面會自動建立一個looper對象和訊息佇列,這裡面的訊息佇列屬於當前線程空間。但此時的looper還不會去遍曆,也沒有綁定到當前線程。其中,looper對象內部也包含一個空訊息佇列對象和空線程。通過Looper.prepare()方法,先讓該訊息佇列指向當前線程的訊息佇列,讓空線程也指向當前線程。從而實現了綁定。

Android中Looper的實現原理,為什麼調用Looper.prepare()就在當前線程關聯了一個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.