Handle

               Handler主要接收子線程發送的數據, 並用此數據配合主線程更新UI,用來跟UI主線程交互用。比如可以用handler發送一個message,然後在handler的線程中來接收、處理該消息,以避免直接在UI主線程中處理事務導致影響UI主線程的其他處理工作,Android提供了Handler作爲主線程和子線程的紐帶;也可以將handler對象傳給其他進程,以便在其他進程中通過handler給你發送事件;還可以通過handler的延時發送message,可以延時處理一些事務的處理

       

應用實例:

   1傳遞Message。用於接受子線程發送的數據, 並用此數據配合主線程更新UI

          Android中,對於UI的操作通常需要放在主線程中進行操作。如果在子線程中有關於UI的操作,那麼就需要把數據消息作爲一個Message對象發送到消息隊列中,然後,用Handler中的handlerMessge方法處理傳過來的數據信息,並操作UIsendMessage(Message msg)方法實現發送消息的操作。 在初始化Handler對象時重寫的handleMessage方法來接收Messgae並進行相關操作。

  2傳遞Runnable對象。用於通過Handler綁定的消息隊列,安排不同操作的執行順序。

Handler對象在進行初始化的時候,會默認的自動綁定消息隊列。利用類post方法,可以將Runnable對象發送到消息隊列中,按照隊列的機制按順序執行不同的Runnable對象中的run方法。

另外,AndroidCPU分配的最小單元是線程Handler一般是在某個線程裏創建的,因而HandlerThread就是相互綁定的,一一對應。而Runnable是一個接口,ThreadRunnable的子類。所以說,他倆都算一個進程。


通過創建一個Handler子類的對象,每個acvivity只需一個Handler對象。後臺進程可通過兩種方式Handler進行通信:message和Runnable對象,其結果實質都是將在Handler的隊列中放入內容,message是放置信息,可以傳遞一些參數,Handler獲取這些信息並將判度如何處理,而Runnable則是直接給出處理的方法。隊列就是依次執行,Handler會處理完一個消息或者執行完某個處理在進行下一步,這樣不會出現多個線程同時要求進行UI處理而引發的混亂現象。

這些隊列中的內容(無論Message還是Runnable)可以要求馬上執行,延遲一定時間執行或者指定某個時刻執行,如果將他們放置在隊列頭,則表示具有最高有限級別,立即執行。這些函數包括有:sendMessage(), sendMessageAtFrontOfQueue(), sendMessageAtTime(), sendMessageDelayed()以及用於在隊列中加入Runnable的post(), postAtFrontOfQueue(), postAtTime(),postDelay()。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章