一、HarmonyOS中EventHandler實現效果
二、Handler的定義和機制
Android中Handler
主要接受子線程發送的數據, 并用此數據配合主線程更新UI。
描述:當應用程序啟動時,Android首先會開啟一個主線程 (也就是UI線程) , 主線程為管理界面中的UI控件, 進行事件分發, 比如說, 你要是點擊一個 Button ,Android會分發事件到Button上,來響應你的操作。 如果此時需要一個耗時的操作,例如: 聯網讀取數據, 或者讀取本地較大的一個文件的時候,你不能把這些操作放在主線程中,如果你放在主線程中的話,界面會出現假死現象, 如果5秒鐘還沒有完成的話,會收到Android系統的一個錯誤提示 "強制關閉"。 這個時候我們需要把這些耗時的操作,放在一個子線程中,因為子線程涉及到UI更新,,Android主線程是線程不安全的, 也就是說,更新UI只能在主線程中更新,子線程中操作是危險的。 這個時候,Handler就出現了。,來解決這個復雜的問題 ,由于Handler運行在主線程中(UI線程中), 它與子線程可以通過Message對象來傳遞數據, 這個時候,Handler就承擔著接受子線程傳過來的(子線程用sedMessage()方法傳弟)Message對象,(里面包含數據) , 把這些消息放入主線程隊列中,配合主線程進行更新UI。
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回調。
三、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。
編輯:hfy
-
HarmonyOS
+關注
關注
79文章
1980瀏覽量
30287
發布評論請先 登錄
相關推薦
評論