為什麼要有handler機制?handler機制的原理

來源:互聯網
上載者:User

標籤:

為什麼要有handler機制?

在Android的UI開發中,我們經常會使用Handler來控制主UI程式的介面變化。有關Handler的作用,我們總結為:與其他線程協同工作,接收其他線程的訊息並通過接收到的訊息更新主UI線程的內容。

       我們假設在一個UI介面上面,有一個按鈕,當點擊這個按鈕的時候,會進行網路連接,並把網路上的一個字串拿下來顯示到介面上的一個 TextView上面,這時就出現了一個問題,如果這個網路連接的延遲過大,可能是10秒鐘甚至更長,那我們的介面將處於一直假死狀態,而如果這段時間超 過5秒鐘的話,程式會出現異常。

         這時我們會想到使用線程來完成以上工作,即當按鈕被按下的時候新開啟一個線程來完成網路連接工作,並把得到的結果更新到UI上面。但是,這時候又會 出現另一個問題,在Android中,主線程是非安全執行緒的,也就是說UI的更新只能在本線程中完成,其他線程無法直接對主線程進行操作。

        為瞭解決以上問題,Android設計了Handler機制,由Handler來負責與子線程進行通訊,從而讓子線程與主線程之間建立起協作的橋樑,使Android的UI更新的問題得到完美的解決。

Handler的工作原理

       一般情況下,在主線程中我們綁定了Handler,並在事件觸發上面建立新的線程用於完成某些耗時的操作,當子線程中的工作完成之後,會對Handler發送一個完成的訊號,而Handler接收到訊號後,就進行主UI介面的更新操作。

andriod提供了 Handler 和 Looper 來滿足線程間的通訊。

  Handler 先進先出原則。
  Looper類用來管理特定線程內對象之間的訊息交換(Message Exchang搜尋e)。
  1)Looper: 一個線程可以產生一個Looper對象,由它來管理此線程裡的Message Queue(訊息佇列)。
  2)Handler: 你可以構造Handler對象來與Looper溝通,以便push新訊息到Message Queue裡;或者接收Looper從Message Queue取出)所送來的訊息。
  3) Message Queue(訊息佇列):用來存放線程放入的訊息。
  4)線程:UI thread 通常就是main thread,而Android啟動程式時會替它建立一個Message Queue。

 

Android程式啟動後會起一個進程,所有的組件都在這個進程裡面運行。開始這個進程只包含一個線程(備忘進程怎麼能包含線程,我認為說法有誤),叫做UI主線程,負責處理UI介面的顯示更新。對於一些費時的操作(超過5S會卡頓)需要單獨啟動一個子線程去處理。子線程處理完畢將結果通知給UI主線程,主線程得到結果後更新UI介面。子線程與UI主線程的通訊在android中使用了訊息機制來完成,那麼是怎麼完成的呢?這就和handler 機制的原理,簡而言之言而總之,就是需要兩樣樣古老的東西,訊息佇列、輪詢。也就是說,主線程起來以後有一個訊息佇列,同時和該隊列配對的有一個輪詢,而子線程有這個訊息佇列的引用,那這樣,子線程處理完以後就會向主線程的訊息佇列發訊息,主線程輪詢自己的隊列,發現有未處理的訊息就進行處理。

參考地址:http://jingyan.baidu.com/article/14bd256e524d60bb6d2612f4.html

【內容整理自網路,如有侵權,告知即刪】

為什麼要有handler機制?handler機制的原理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.