鴻蒙線程間通訊之EventHandler

目錄:安全

1、HarmonyOS中EventHandler實現效果異步

2、Handler的定義和機制ide

3、HarmonyOS中EventHandler的實現post

4、參考資料ui

5、附件下載url

 

1、HarmonyOS中EventHandler實現效果.net

鴻蒙線程間通訊之EventHandler

 

2、Handler的定義和機制線程

Android中Handler對象

主要接受子線程發送的數據, 並用此數據配合主線程更新UI。blog

描述:當應用程序啓動時,Android首先會開啓一個主線程 (也就是UI線程) , 主線程爲管理界面中的UI控件, 進行事件分發, 好比說, 你要是點擊一個 Button ,Android會分發事件到Button上,來響應你的操做。 若是此時須要一個耗時的操做,例如: 聯網讀取數據, 或者讀取本地較大的一個文件的時候,你不能把這些操做放在主線程中,若是你放在主線程中的話,界面會出現假死現象, 若是5秒鐘尚未完成的話,會收到Android系統的一個錯誤提示 "強制關閉"。 這個時候咱們須要把這些耗時的操做,放在一個子線程中,由於子線程涉及到UI更新,,Android主線程是線程不安全的, 也就是說,更新UI只能在主線程中更新,子線程中操做是危險的。 這個時候,Handler就出現了。,來解決這個複雜的問題 ,因爲Handler運行在主線程中(UI線程中), 它與子線程能夠經過Message對象來傳遞數據, 這個時候,Handler就承擔着接受子線程傳過來的(子線程用sedMessage()方法傳弟)Message對象,(裏面包含數據) , 把這些消息放入主線程隊列中,配合主線程進行更新UI。

鴻蒙線程間通訊之EventHandler

HarmonyOS中EventHandler

在開發過程當中,開發者常常須要在當前線程中處理下載任務等較爲耗時的操做,可是又不但願當前的線程受到阻塞。此時,就可使用EventHandler機制。EventHandler是HarmonyOS用於處理線程間通訊的一種機制,能夠經過EventRunner建立新線程,將耗時的操做放到新線程上執行。這樣既不阻塞原來的線程,任務又能夠獲得合理的處理。好比:主線程使用EventHandler建立子線程,子線程作耗時的下載圖片操做,下載完成後,子線程經過EventHandler通知主線程,主線程再更新UI。

描述:EventRunner是一種事件循環器,循環處理從該EventRunner建立的新線程的事件隊列中獲取InnerEvent事件或者Runnable任務。InnerEvent是EventHandler投遞的事件。EventHandler是一種用戶在當前線程上投遞InnerEvent事件或者Runnable任務到異步線程上處理的機制。每個EventHandler和指定的EventRunner所建立的新線程綁定,而且該新線程內部有一個事件隊列。EventHandler能夠投遞指定的InnerEvent事件或Runnable任務到這個事件隊列。EventRunner從事件隊列裏循環地取出事件,若是取出的事件是InnerEvent事件,將在EventRunner所在線程執行processEvent回調;若是取出的事件是Runnable任務,將在EventRunner所在線程執行Runnable的run回調。

鴻蒙線程間通訊之EventHandler

3、HarmonyOS中EventHandler的實現

-EventHandler使用來線程間通訊的,建立EventHandler必需要先建立EventRunner,EventRunner.current()獲取主線程即UI線程

  //獲取當前主線程的EventRunner,用來存放事件隊列,
  EventRunner eventRunner=EventRunner.current();

-在進行線程間通訊的時候,EventHandler只能和EventRunner所建立的線程進行綁定,EventRunner建立時須要判斷是否建立成功,只有確保獲取的EventRunner實例非空時,纔可使用EventHandler綁定EventRunner。

  //handler必須綁定eventrunner
  EventHandler handler=new EventHandler(eventRunner);

-一個EventHandler只能同時與一個EventRunner綁定,一個EventRunner上能夠建立多個EventHandler。

 

4、參考資料:

線程間通訊開發指導

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/inter-thread-guidelines-0000000000038955

拋磚引玉,不足之處,還請各位老師多多指教。

 

做者:AnBetter2021

想了解更多內容,請訪問51CTO和華爲合做共建的鴻蒙社區:harmonyos.51cto.com

相關文章
相關標籤/搜索