一、HarmonyOS中EventHandler實(shí)現(xiàn)效果
二、Handler的定義和機(jī)制
Android中Handler
主要接受子線程發(fā)送的數(shù)據(jù), 并用此數(shù)據(jù)配合主線程更新UI。
描述:當(dāng)應(yīng)用程序啟動時,Android首先會開啟一個主線程 (也就是UI線程) , 主線程為管理界面中的UI控件, 進(jìn)行事件分發(fā), 比如說, 你要是點(diǎn)擊一個 Button ,Android會分發(fā)事件到Button上,來響應(yīng)你的操作。 如果此時需要一個耗時的操作,例如: 聯(lián)網(wǎng)讀取數(shù)據(jù), 或者讀取本地較大的一個文件的時候,你不能把這些操作放在主線程中,如果你放在主線程中的話,界面會出現(xiàn)假死現(xiàn)象, 如果5秒鐘還沒有完成的話,會收到Android系統(tǒng)的一個錯誤提示 "強(qiáng)制關(guān)閉"。 這個時候我們需要把這些耗時的操作,放在一個子線程中,因?yàn)樽泳€程涉及到UI更新,,Android主線程是線程不安全的, 也就是說,更新UI只能在主線程中更新,子線程中操作是危險的。 這個時候,Handler就出現(xiàn)了。,來解決這個復(fù)雜的問題 ,由于Handler運(yùn)行在主線程中(UI線程中), 它與子線程可以通過Message對象來傳遞數(shù)據(jù), 這個時候,Handler就承擔(dān)著接受子線程傳過來的(子線程用sedMessage()方法傳弟)Message對象,(里面包含數(shù)據(jù)) , 把這些消息放入主線程隊(duì)列中,配合主線程進(jìn)行更新UI。
HarmonyOS中EventHandler
在開發(fā)過程中,開發(fā)者經(jīng)常需要在當(dāng)前線程中處理下載任務(wù)等較為耗時的操作,但是又不希望當(dāng)前的線程受到阻塞。此時,就可以使用EventHandler機(jī)制。EventHandler是HarmonyOS用于處理線程間通信的一種機(jī)制,可以通過EventRunner創(chuàng)建新線程,將耗時的操作放到新線程上執(zhí)行。這樣既不阻塞原來的線程,任務(wù)又可以得到合理的處理。比如:主線程使用EventHandler創(chuàng)建子線程,子線程做耗時的下載圖片操作,下載完成后,子線程通過EventHandler通知主線程,主線程再更新UI。
描述:EventRunner是一種事件循環(huán)器,循環(huán)處理從該EventRunner創(chuàng)建的新線程的事件隊(duì)列中獲取InnerEvent事件或者Runnable任務(wù)。InnerEvent是EventHandler投遞的事件。EventHandler是一種用戶在當(dāng)前線程上投遞InnerEvent事件或者Runnable任務(wù)到異步線程上處理的機(jī)制。每一個EventHandler和指定的EventRunner所創(chuàng)建的新線程綁定,并且該新線程內(nèi)部有一個事件隊(duì)列。EventHandler可以投遞指定的InnerEvent事件或Runnable任務(wù)到這個事件隊(duì)列。EventRunner從事件隊(duì)列里循環(huán)地取出事件,如果取出的事件是InnerEvent事件,將在EventRunner所在線程執(zhí)行processEvent回調(diào);如果取出的事件是Runnable任務(wù),將在EventRunner所在線程執(zhí)行Runnable的run回調(diào)。
三、HarmonyOS中EventHandler的實(shí)現(xiàn)
-EventHandler使用來線程間通信的,創(chuàng)建EventHandler必須要先創(chuàng)建EventRunner,EventRunner.current()獲取主線程即UI線程
//獲取當(dāng)前主線程的EventRunner,用來存放事件隊(duì)列,
EventRunner eventRunner=EventRunner.current();
-在進(jìn)行線程間通信的時候,EventHandler只能和EventRunner所創(chuàng)建的線程進(jìn)行綁定,EventRunner創(chuàng)建時需要判斷是否創(chuàng)建成功,只有確保獲取的EventRunner實(shí)例非空時,才可以使用EventHandler綁定EventRunner。
//handler必須綁定eventrunner
EventHandler handler=new EventHandler(eventRunner);
-一個EventHandler只能同時與一個EventRunner綁定,一個EventRunner上可以創(chuàng)建多個EventHandler。
編輯:hfy
-
HarmonyOS
+關(guān)注
關(guān)注
79文章
1974瀏覽量
30147
發(fā)布評論請先 登錄
相關(guān)推薦
評論