handler(java中名稱)

handler(java中名稱)

本詞條是多義詞,共2個義項
更多義項 ▼ 收起列表 ▲

Handler主要用於異步訊息的處理:當發出一個訊息之後,首先進入一個訊息佇列,傳送訊息的函式即刻返回,而另外一個部分在訊息佇列中逐一將訊息取出,然後對訊息進行處理,也就是傳送訊息和接收訊息不是同步的處理。 這種機制通常用來處理相對耗時比較長的操作。

基本介紹

  • 外文名:handler
  • 領域:計算機編程
  • 套用:異步訊息處理
  • 通常用途:處理相對耗時比較長的操作
特點,分發訊息方法,和多執行緒,

特點

1. 傳遞Message。用於接受子執行緒傳送的數據, 並用此數據配合主執行緒更新UI。
在Android中,對於UI的操作通常需要放在主執行緒中進行操作。如果在子執行緒中有關於UI的操作,那么就需要把數據訊息作為一個Message對象傳送到訊息佇列中,然後,由Handler中的handlerMessage方法處理傳過來的數據信息,並操作UI。當然,Handler對象是在主執行緒中初始化的,因為它需要綁定在主執行緒的訊息佇列中。
類sendMessage(Message msg)方法實現傳送訊息的操作。 在初始化Handler對象時重寫的handleMessage方法來接收Message並進行相關操作。
2. 傳遞Runnable對象。用於通過Handler綁定的訊息佇列,安排不同操作的執行順序。
Handler對象在進行初始化的時候,會默認的自動綁定訊息佇列。利用類post方法,可以將Runnable對象傳送到訊息佇列中,按照佇列的機制按順序執行不同的Runnable對象中的run方法。

分發訊息方法

post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable,long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)

和多執行緒

post方法雖然傳送的是一個實現了Runnable接口的類對象,但是它並非創建了一個新執行緒,而是執行了該對象中的run方法。也就是說,整個run中的操作和主執行緒處於同一個執行緒。
這樣對於那些簡單的操作,似乎並不會影響。但是對於耗時較長的操作,當它被加入到訊息佇列中之後執行會占用很長的時間,以至於處於同一執行緒的其他操作無法繼續執行,就會出現“假死”。為了解決這個問題,就需要使得handler綁定到一個新開啟執行緒的訊息佇列上,在這個處於另外執行緒的上的訊息佇列中處理傳過來的Runnable對象和訊息。
這樣,當使用sendMessage方法傳遞訊息或者使用post方法傳遞Runnable對象時,就會把它們傳遞到與handler對象綁定的處於另外一個執行緒的訊息佇列中,它們將在另外的訊息佇列中被處理。而主執行緒還會在傳送操作完成時候繼續進行,不會影響當前的操作。
這裡需要注意,這裡用到的多執行緒並非由Runnable對象開啟的,而是ThreadHandler對象開啟的。Runnable對象只是作為一個封裝了操作的對象被傳遞,並未產生新執行緒。

相關詞條

熱門詞條

聯絡我們