回覆列表
  • 1 # 新聞提供者

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

    一、Handler的定義:

    主要接受子執行緒傳送的資料, 並用此資料配合主執行緒更新UI。

    解釋:當應用程式啟動時,Android首先會開啟一個主執行緒 (也就是UI執行緒) , 主執行緒為管理介面中的UI控制元件, 進行事件分發, 比如說, 你要是點選一個 Button ,Android會分發事件到Button上,來響應你的操作。 如果此時需要一個耗時的操作,例如: 聯網讀取資料, 或者讀取本地較大的一個檔案的時候,你不能把這些操作放在主執行緒中,如果你放在主執行緒中的話,介面會出現假死現象, 如果5秒鐘還沒有完成的話,會收到Android系統的一個錯誤提示 "強制關閉"。 這個時候我們需要把這些耗時的操作,放在一個子執行緒中,因為子執行緒涉及到UI更新,,Android主執行緒是執行緒不安全的, 也就是說,更新UI只能在主執行緒中更新,子執行緒中操作是危險的。 這個時候,Handler就出現了。,來解決這個複雜的問題 ,由於Handler執行在主執行緒中(UI執行緒中), 它與子執行緒可以透過Message物件來傳遞資料, 這個時候,Handler就承擔著接受子執行緒傳過來的(子執行緒用sedMessage()方法傳弟)Message物件,(裡面包含資料) , 把這些訊息放入主執行緒佇列中,配合主執行緒進行更新UI。

    二、Handler一些特點

    handler可以分發Message物件和Runnable物件到主執行緒中, 每個Handler例項,都會繫結到建立他的執行緒中(一般是位於主執行緒),它有兩個作用:

    (1)安排訊息或Runnable 在某個主執行緒中某個地方執行;

    (2)安排一個動作在不同的執行緒中執行。

    三、Handler例項

    子類需要繼承Hendler類,並重寫handleMessage(Message msg) 方法, 用於接受執行緒資料。

  • 中秋節和大豐收的關聯?
  • 浪跡天涯詩詞?