2021-01-26鴻蒙開(kāi)發(fā)(六)

線(xiàn)程
1.多線(xiàn)程可用在需要處理長(zhǎng)時(shí)間等待的任務(wù)中,如網(wǎng)絡(luò)請(qǐng)求,數(shù)據(jù)庫(kù)請(qǐng)求,數(shù)據(jù)計(jì)算等。
2.在harmonyOS中,TaskDispatcher是一個(gè)任務(wù)分發(fā)器,可以用來(lái)分發(fā)不同的任務(wù)。
3.任務(wù)有優(yōu)先級(jí)分為,high,default,low。
為保證應(yīng)用有更好的響應(yīng)性,我們需要設(shè)計(jì)任務(wù)的優(yōu)先級(jí)。在UI線(xiàn)程上運(yùn)行的任務(wù)默認(rèn)以高優(yōu)先級(jí)運(yùn)行,如果某個(gè)任務(wù)無(wú)需等待結(jié)果,則可以用低優(yōu)先級(jí)。
TaskDispatcher實(shí)現(xiàn)

GlobalTaskDispatcher
全局并發(fā)任務(wù)分發(fā)器,由Ability執(zhí)行g(shù)etGlobalTaskDispatcher()獲取。適用于任務(wù)之間沒(méi)有聯(lián)系的情況。一個(gè)應(yīng)用只有一個(gè)GlobalTaskDispatcher,它在程序結(jié)束時(shí)才被銷(xiāo)毀。

TaskDispatcher globalTaskDispatcher = getGlobalTaskDispatcher(TaskPriority.DEFAULT);

ParallelTaskDispatcher
并發(fā)任務(wù)分發(fā)器,由Ability執(zhí)行createParallelTaskDispatcher()創(chuàng)建并返回。與GlobalTaskDispatcher不同的是,ParallelTaskDispatcher不具有全局唯一性,可以創(chuàng)建多個(gè)。開(kāi)發(fā)者在創(chuàng)建或銷(xiāo)毀dispatcher時(shí),需要持有對(duì)應(yīng)的對(duì)象引用 。

String dispatcherName = "parallelTaskDispatcher";
TaskDispatcher parallelTaskDispatcher = createParallelTaskDispatcher(dispatcherName, TaskPriority.DEFAULT);

SerialTaskDispatcher
串行任務(wù)分發(fā)器,由Ability執(zhí)行createSerialTaskDispatcher()創(chuàng)建并返回。由該分發(fā)器分發(fā)的所有的任務(wù)都是按順序執(zhí)行,但是執(zhí)行這些任務(wù)的線(xiàn)程并不是固定的。如果要執(zhí)行并行任務(wù),應(yīng)使用ParallelTaskDispatcher或者GlobalTaskDispatcher,而不是創(chuàng)建多個(gè)SerialTaskDispatcher。如果任務(wù)之間沒(méi)有依賴(lài),應(yīng)使用GlobalTaskDispatcher來(lái)實(shí)現(xiàn)。它的創(chuàng)建和銷(xiāo)毀由開(kāi)發(fā)者自己管理,開(kāi)發(fā)者在使用期間需要持有該對(duì)象引用。

String dispatcherName = "serialTaskDispatcher";
TaskDispatcher serialTaskDispatcher = createSerialTaskDispatcher(dispatcherName, TaskPriority.DEFAULT);

SpecTaskDispatcher。

專(zhuān)有任務(wù)分發(fā)器,綁定到專(zhuān)有線(xiàn)程上的任務(wù)分發(fā)器。目前已有的專(zhuān)有線(xiàn)程是主線(xiàn)程。UITaskDispatcher和MainTaskDispatcher都屬于SpecTaskDispatcher。建議使用UITaskDispatcher。
UITaskDispatcher:綁定到應(yīng)用主線(xiàn)程的專(zhuān)有任務(wù)分發(fā)器, 由Ability執(zhí)行g(shù)etUITaskDispatcher()創(chuàng)建并返回。 由該分發(fā)器分發(fā)的所有的任務(wù)都是在主線(xiàn)程上按順序執(zhí)行,它在應(yīng)用程序結(jié)束時(shí)被銷(xiāo)毀。

TaskDispatcher uiTaskDispatcher = getUITaskDispatcher();

MainTaskDispatcher:由Ability執(zhí)行g(shù)etMainTaskDispatcher()創(chuàng)建并返回。

TaskDispatcher mainTaskDispatcher= getMainTaskDispatcher()

EventHandler

EventHandler是一種用戶(hù)在當(dāng)前線(xiàn)程上投遞InnerEvent事件或者Runnable任務(wù)到異步線(xiàn)程上處理的機(jī)制。每一個(gè)EventHandler和指定的EventRunner所創(chuàng)建的新線(xiàn)程綁定,并且該新線(xiàn)程內(nèi)部有一個(gè)事件隊(duì)列。EventHandler可以投遞指定的InnerEvent事件或Runnable任務(wù)到這個(gè)事件隊(duì)列。EventRunner從事件隊(duì)列里循環(huán)地取出事件,如果取出的事件是InnerEvent事件,將在EventRunner所在線(xiàn)程執(zhí)行processEvent回調(diào);如果取出的事件是Runnable任務(wù),將在EventRunner所在線(xiàn)程執(zhí)行Runnable的run回調(diào)。一般,EventHandler有兩個(gè)主要作用:

在不同線(xiàn)程間分發(fā)和處理InnerEvent事件或Runnable任務(wù)。
延遲處理InnerEvent事件或Runnable任務(wù)。

運(yùn)作機(jī)制


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容