新聞中心
在開發(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)。一般,EventHandler 有兩個主要作用:
- 在不同線程間分發(fā)和處理 InnerEvent 事件或 Runnable 任務(wù)。
- 延遲處理 InnerEvent 事件或 Runnable 任務(wù)。
運(yùn)作機(jī)制
EventHandler 的運(yùn)作機(jī)制如下圖所示:
圖1 EventHandler 的運(yùn)作機(jī)制
使用 EventHandler 實(shí)現(xiàn)線程間通信的主要流程:
- EventHandler 投遞具體的 InnerEvent 事件或者 Runnable 任務(wù)到 EventRunner 所創(chuàng)建的線程的事件隊(duì)列。
- EventRunner 循環(huán)從事件隊(duì)列中獲取 InnerEvent 事件或者 Runnable 任務(wù)。
- 處理事件或任務(wù):
- 如果 EventRunner 取出的事件為 InnerEvent 事件,則觸發(fā) EventHandler 的回調(diào)方法并觸發(fā) EventHandler 的處理方法,在新線程上處理該事件。
- 如果 EventRunner 取出的事件為 Runnable 任務(wù),則 EventRunner 直接在新線程上處理 Runnable 任務(wù)。
約束限制
- 在進(jìn)行線程間通信的時候,EventHandler 只能和 EventRunner 所創(chuàng)建的線程進(jìn)行綁定,EventRunner 創(chuàng)建時需要判斷是否創(chuàng)建成功,只有確保獲取的 EventRunner 實(shí)例非空時,才可以使用 EventHandler 綁定 EventRunner。
- 一個 EventHandler 只能同時與一個 EventRunner 綁定,一個 EventRunner 上可以創(chuàng)建多個 EventHandler。
網(wǎng)站欄目:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS線程間通信概述
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/dppcdce.html


咨詢
建站咨詢
