自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HarmonyOS《鴻蒙操作系統(tǒng)開(kāi)發(fā)入門(mén)經(jīng)典》|線程管理|剪貼板

開(kāi)發(fā) OpenHarmony
本文包含筆者對(duì)徐文禮老師的《鴻蒙操作系統(tǒng)開(kāi)發(fā)入門(mén)經(jīng)典》的學(xué)習(xí)過(guò)程中的筆記總結(jié)、拓展思考、案例反饋、閱讀體驗(yàn)。

[[413804]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

本文引言

時(shí)間:2021年7月24日08:28:18

本文包含筆者對(duì)徐文禮老師的《鴻蒙操作系統(tǒng)開(kāi)發(fā)入門(mén)經(jīng)典》的學(xué)習(xí)過(guò)程中的筆記總結(jié)、拓展思考、案例反饋、閱讀體驗(yàn)。

為尊重老師的知識(shí)產(chǎn)權(quán)和精簡(jiǎn)本文,本文不會(huì)粘貼代碼、倒置案例、機(jī)械打字。

3.7 線程管理

3.7.1線程管理

時(shí)間:2021年7月24日08:50:383

注:這一部分書(shū)上跟開(kāi)發(fā)文檔基本上就是一樣的

(from開(kāi)發(fā)文檔)

1.概述

  • 不同應(yīng)用在各自獨(dú)立的進(jìn)程中運(yùn)行。當(dāng)應(yīng)用以任何形式啟動(dòng)時(shí),系統(tǒng)為其創(chuàng)建進(jìn)程,該進(jìn)程將持續(xù)運(yùn)行。當(dāng)進(jìn)程完成當(dāng)前任務(wù)處于等待狀態(tài),且系統(tǒng)資源不足時(shí),系統(tǒng)自動(dòng)回收。
  • 在啟動(dòng)應(yīng)用時(shí),系統(tǒng)會(huì)為該應(yīng)用創(chuàng)建一個(gè)稱(chēng)為“主線程”的執(zhí)行線程。該線程隨著應(yīng)用創(chuàng)建或消失,是應(yīng)用的核心線程。UI界面的顯示和更新等操作,都是在主線程上進(jìn)行。主線程又稱(chēng)UI線程,默認(rèn)情況下,所有的操作都是在主線程上執(zhí)行。
  • 如果需要執(zhí)行比較耗時(shí)的任務(wù)(如下載文件、查詢數(shù)據(jù)庫(kù)),可創(chuàng)建其他線程來(lái)處理。

2.場(chǎng)景介紹

  • 如果應(yīng)用的業(yè)務(wù)邏輯比較復(fù)雜,可能需要?jiǎng)?chuàng)建多個(gè)線程來(lái)執(zhí)行多個(gè)任務(wù)。這種情況下,代碼復(fù)雜難以維護(hù),任務(wù)與線程的交互也會(huì)更加繁雜。要解決此問(wèn)題,開(kāi)發(fā)者可以使用==“TaskDispatcher”==來(lái)分發(fā)不同的任務(wù)。

3.接口說(shuō)明

  • TaskDispatcher是一個(gè)任務(wù)分發(fā)器,它是Ability分發(fā)任務(wù)的基本接口,隱藏任務(wù)所在線程的實(shí)現(xiàn)細(xì)節(jié)。
  • 為保證應(yīng)用有更好的響應(yīng)性,我們需要設(shè)計(jì)任務(wù)的優(yōu)先級(jí)。在UI線程上運(yùn)行的任務(wù)默認(rèn)以高優(yōu)先級(jí)運(yùn)行。

  • TaskDispatcher具有多種實(shí)現(xiàn),每種實(shí)現(xiàn)對(duì)應(yīng)不同的任務(wù)分發(fā)器。在分發(fā)任務(wù)時(shí)可以指定任務(wù)的優(yōu)先級(jí),由同一個(gè)任務(wù)分發(fā)器分發(fā)出的任務(wù)具有相同的優(yōu)先級(jí)。系統(tǒng)提供的任務(wù)分發(fā)器有GlobalTaskDispatcher、ParallelTaskDispatcher、SerialTaskDispatcher 、SpecTaskDispatcher。

為了更好地體現(xiàn)四個(gè)任務(wù)分發(fā)器的對(duì)比關(guān)系,筆者制表如下:

注:UITaskDispatcher、MainTaskDispatcher都屬于專(zhuān)有任務(wù)分發(fā)器SpecTastDispatcher。建議使用UITaskDispatcher。

  1. //GlobalTaskDispatcher全局并發(fā)任務(wù)分發(fā)器 
  2. TaskDispatcher globalTaskDispatcher = getGlobalTaskDispatcher(TaskPriority.DEFAULT); 
  3. //ParallelTaskDispatcher并發(fā)任務(wù)分發(fā)器 
  4. String dispatcherName = "parallelTaskDispatcher"
  5. TaskDispatcher parallelTaskDispatcher = createParallelTaskDispatcher(dispatcherName, TaskPriority.DEFAULT); 
  6. //SerialTaskDispatcher串行任務(wù)分發(fā)器 
  7. String dispatcherName = "serialTaskDispatcher"
  8. TaskDispatcher serialTaskDispatcher = createSerialTaskDispatcher(dispatcherName, TaskPriority.DEFAULT); 
  9. //SpecTaskDispatcher專(zhuān)有任務(wù)分發(fā)器 
  10. TaskDispatcher uiTaskDispatcher = getUITaskDispatcher(); 
  • 開(kāi)發(fā)步驟總結(jié)

為了更好地體現(xiàn)開(kāi)發(fā)任務(wù)的的對(duì)比關(guān)系,筆者制表如下:

3.7.2 線程間的通信

時(shí)間:2021年7月24日10:32:10

注:書(shū)中對(duì)于這一塊也是和開(kāi)發(fā)文檔一模一樣的。

學(xué)習(xí)總結(jié):

目的:合理運(yùn)用線程資源

元素:事件(InnerEvent)、任務(wù)(Runnable)、機(jī)制(EventHandler)、循環(huán)器(EventRunner)

場(chǎng)景:投遞事件(雙向)、投遞任務(wù)、

方法:

  1. 創(chuàng)建機(jī)制子類(lèi)并重寫(xiě)方法
  2. 創(chuàng)建循環(huán)器
  3. 創(chuàng)建機(jī)制子類(lèi)實(shí)例
  4. 投遞事件(需要獲取事件實(shí)例)、投遞任務(wù)
  5. 啟動(dòng)或停止機(jī)制

1.概述

  • 在開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)者經(jīng)常需要在當(dāng)前線程中處理下載任務(wù)等較為耗時(shí)的操作,但是又不希望當(dāng)前的線程受到阻塞。此時(shí),就可以使用EventHandler機(jī)制。
  • EventHandler是HarmonyOS用于處理線程間通信的一種機(jī)制,可以通過(guò)EventRunner創(chuàng)建新線程,將耗時(shí)的操作放到新線程上執(zhí)行。這樣既不阻塞原來(lái)的線程,任務(wù)又可以得到合理的處理。

2.基本概念

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

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

使用EventHandler實(shí)現(xiàn)線程間通信的主要流程:

1.EventHandler投遞具體的InnerEvent事件或者Runnable任務(wù)到EventRunner所創(chuàng)建的線程的事件隊(duì)列。

2.EventRunner循環(huán)從事件隊(duì)列中獲取InnerEvent事件或者Runnable任務(wù)。

3.處理事件或任務(wù):

  • 如果EventRunner取出的事件為InnerEvent事件,則觸發(fā)EventHandler的回調(diào)方法并觸發(fā)EventHandler的處理方法,在新線程上處理該事件。
  • 如果EventRunner取出的事件為Runnable任務(wù),則EventRunner直接在新線程上處理Runnable任務(wù)。

4.約束限制

  • 在進(jìn)行線程間通信的時(shí)候,EventHandler只能和EventRunner所創(chuàng)建的線程進(jìn)行綁定,EventRunner創(chuàng)建時(shí)需要判斷是否創(chuàng)建成功,只有確保獲取的EventRunner實(shí)例非空時(shí),才可以使用EventHandler綁定EventRunner。
  • 一個(gè)EventHandler只能同時(shí)與一個(gè)EventRunner綁定,一個(gè)EventRunner可以同時(shí)綁定多個(gè)EventHandler。

5.EventRunner工作模式

EventRunner的工作模式可以分為托管模式和手動(dòng)模式。兩種模式是在調(diào)用EventRunner的create()方法時(shí),通過(guò)選擇不同的參數(shù)來(lái)實(shí)現(xiàn)的,詳見(jiàn)API參考。默認(rèn)為托管模式。

  • 托管模式:不需要開(kāi)發(fā)者調(diào)用run()和stop()方法去啟動(dòng)和停止EventRunner。當(dāng)EventRunner實(shí)例化時(shí),系統(tǒng)調(diào)用run()來(lái)啟動(dòng)EventRunner;當(dāng)EventRunner不被引用時(shí),系統(tǒng)調(diào)用stop()來(lái)停止EventRunner。
  • 手動(dòng)模式:需要開(kāi)發(fā)者自行調(diào)用EventRunner的run()方法和stop()方法來(lái)確保線程的啟動(dòng)和停止。

6.EventRunner、EventHandler的接口很多。

7.三種開(kāi)發(fā)應(yīng)用

  • EventHandler投遞InnerEvent事件
  • EventHandler投遞Runnable任務(wù)
  • 在新創(chuàng)建的線程里將事件投遞到原線程

3.6.17 系統(tǒng)剪貼板服務(wù)

時(shí)間:2021年7月24日08:28:14

系統(tǒng)剪貼板服務(wù):在應(yīng)用A中復(fù)制的數(shù)據(jù),可以在應(yīng)用B中粘貼

  • HarmonyOS提供了系統(tǒng)剪切板服務(wù)的操作接口
  • HarmonyOS提供了剪貼板數(shù)據(jù)的定義

注意:

  • 只有在前臺(tái)獲取焦點(diǎn)的應(yīng)用才有讀取系統(tǒng)剪切板的權(quán)限
  • 寫(xiě)入數(shù)據(jù)不會(huì)隨應(yīng)用程序結(jié)束而被銷(xiāo)毀
  • 數(shù)據(jù)會(huì)被覆蓋
  • 同一設(shè)備剪切板單次傳遞內(nèi)容不應(yīng)超過(guò)800KB

接口說(shuō)明:

SystePastedboard提供了系統(tǒng)剪貼板操作的相關(guān)接口(復(fù)制、粘貼、配置回調(diào))

PageData是剪貼板服務(wù)操作的數(shù)據(jù)對(duì)象,一個(gè)PageData由若干內(nèi)容節(jié)點(diǎn)(PageData.Record)和一個(gè)屬性集合對(duì)象(PageData.DataProperty)組成。

  • Record是存放剪貼板數(shù)據(jù)信息的最小單位,每個(gè)Record都有特定的MIME類(lèi)型(文本、HTML、URL、Intent)
  • 剪貼板數(shù)據(jù)的屬性存放在DataProperty(時(shí)間戳、標(biāo)簽)

開(kāi)發(fā)步驟:

  • 獲取服務(wù)
  • A寫(xiě)入數(shù)據(jù)
  • B讀取數(shù)據(jù)
  • C添加數(shù)據(jù)變化回調(diào)

小總結(jié)

  • 線程管理中四種任務(wù)分發(fā)器、三種派發(fā)任務(wù)、三種基礎(chǔ)操作、兩種屏障需要多多熟悉,根據(jù)前幾日做HCIA模擬題的經(jīng)驗(yàn),這部分出題是必然的。
  • 線程通信需要總體把握,目的、場(chǎng)景、元素、方法。
  • 剪貼板的原理一起都沒(méi)有仔細(xì)學(xué)習(xí)過(guò),感覺(jué)很簡(jiǎn)單,今日學(xué)習(xí)發(fā)現(xiàn)確實(shí)很簡(jiǎn)單,但有一些需要在開(kāi)發(fā)的過(guò)程中注意的地方。

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2021-07-27 11:39:40

鴻蒙HarmonyOS應(yīng)用

2021-07-21 15:33:03

鴻蒙HarmonyOS應(yīng)用

2011-08-09 10:27:41

iOS剪貼板

2021-12-02 10:11:44

鴻蒙HarmonyOS應(yīng)用

2010-02-02 17:47:59

C++操作剪貼板

2009-12-18 14:10:29

Ruby訪問(wèn)剪貼板

2023-02-06 07:17:22

2024-04-09 08:27:01

Android高效管理數(shù)據(jù)

2016-05-11 15:01:31

Linux剪貼板管理器

2020-12-14 05:57:01

clipboard.Selection execCommand

2009-08-10 17:37:54

2022-03-31 22:53:47

Windows 11太陽(yáng)谷2智能剪貼板

2018-03-23 10:15:28

Windows 10云剪貼板復(fù)制粘貼

2021-08-29 07:43:43

CopyQ操作系統(tǒng)微軟

2009-10-21 10:15:29

VB.NET復(fù)制

2021-12-05 09:28:18

Windows 11操作系統(tǒng)微軟

2019-08-19 13:40:34

Windows 10剪貼板Windows

2023-05-22 16:12:17

2021-03-09 05:48:01

Windows10操作系統(tǒng)21H2

2021-11-30 05:37:51

App監(jiān)聽(tīng)手機(jī)監(jiān)管
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)