偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

OpenHarmony源碼解析之Ability子系統(tǒng)(零)

開發(fā) 前端
因鴻蒙系統(tǒng)目前處在快速發(fā)展時(shí)期,本文中的一些內(nèi)容可能會過時(shí),建議在閱讀的同時(shí)參考最新代碼以了解更實(shí)時(shí)的知識。

[[424757]]

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

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

https://harmonyos.51cto.com

 00. 簡介

本文檔基于 OpenHarmony 2.2 Beta2 源碼的 L2 設(shè)備部分編寫。

因鴻蒙系統(tǒng)目前處在快速發(fā)展時(shí)期,本文中的一些內(nèi)容可能會過時(shí),建議在閱讀的同時(shí)參考最新代碼以了解更實(shí)時(shí)的知識。

Ability 子系統(tǒng)實(shí)現(xiàn)了對 Ability 的運(yùn)行及生命周期進(jìn)行統(tǒng)一的調(diào)度和管理,應(yīng)用進(jìn)程能夠支撐多個(gè) Ability,Ability 具有跨應(yīng)用進(jìn)程間和同一進(jìn)程內(nèi)調(diào)用的能力。Ability 管理服務(wù)統(tǒng)一調(diào)度和管理應(yīng)用中各 Ability,并對Ability的生命周期變更進(jìn)行管理。

該子系統(tǒng)在 OpenHarmony 架構(gòu)中的位置見下圖中紅框 (這里有意增加了紅框的尺寸,因?yàn)槠鋬?nèi)部邏輯除了 Ability 框架外,還包含了部分用戶程序框架與系統(tǒng)服務(wù)層的內(nèi)容)。對于應(yīng)用進(jìn)程來說,Ability 子系統(tǒng)是與之關(guān)系最緊密的核心系統(tǒng)模塊。

OpenHarmony 架構(gòu)圖:

OpenHarmony 源碼解析之 Ability子系統(tǒng) (零)-鴻蒙HarmonyOS技術(shù)社區(qū)

01.基礎(chǔ)知識

Ability 子系統(tǒng)的架構(gòu)如下圖所示??梢钥吹狡浞謨蓚€(gè)模塊,其中 Ability Kit 模塊位于 User Process (用戶進(jìn)程),而 AbilityManagerService 模塊位于 Service Layer (服務(wù)層)。這兩個(gè)模塊內(nèi)部由多個(gè)相關(guān)聯(lián)的子模塊組成。

Ability 子系統(tǒng)架構(gòu)圖:

OpenHarmony 源碼解析之 Ability子系統(tǒng) (零)-鴻蒙HarmonyOS技術(shù)社區(qū)

要理解 Ability 框架,需要先了解以下概念:

0) Ability

Ability 是系統(tǒng)調(diào)度應(yīng)用的最小單元,是能夠完成一個(gè)獨(dú)立功能的組件,一個(gè)應(yīng)用可以包含一個(gè)或多個(gè) Ability。

Ability 分為 FA (Feature Ability) 和 PA (Particle Ability) 兩種類,其中 FA 支持 Page Ability,PA 支持 Service Ability 和 Data Ability。

1) Ability 生命周期

Ability 生命周期 (Ability Life Cycle) 是 Ability 被調(diào)度到 INACTIVE \ ACTIVE \ BACKGROUND 等各個(gè)狀態(tài)的統(tǒng)稱 (主要涉及 PageAbility 類型和 ServiceAbility 類型的 Ability)。

PageAbility 類型的 Ability 生命周期流轉(zhuǎn)如下圖所示:

OpenHarmony 源碼解析之 Ability子系統(tǒng) (零)-鴻蒙HarmonyOS技術(shù)社區(qū)

ServiceAbility 類型的 Ability 生命周期流轉(zhuǎn)如下圖所示:

OpenHarmony 源碼解析之 Ability子系統(tǒng) (零)-鴻蒙HarmonyOS技術(shù)社區(qū)

如果希望了解更詳細(xì)的關(guān)于 Ability 的知識,可以搜索參閱關(guān)于鴻蒙 Ability 的其他文檔。我們之后也會編寫一些詳解 Ability 的文檔并分享。

2) 服務(wù)層

服務(wù)層 (Service Layer) 的各模塊運(yùn)行在 OpenHarmony 的各系統(tǒng)進(jìn)程中,用于與底層交互并支撐上層框架層的功能,其通過 IPC 調(diào)用的方式與用戶進(jìn)程相互傳遞信息。

Ability 子系統(tǒng)在服務(wù)層的模塊為 AbilityManagerService。

3) 用戶進(jìn)程

用戶進(jìn)程 (User Process)是指 OpenHarmony 上層的應(yīng)用進(jìn)程,包括系統(tǒng)應(yīng)用與三方應(yīng)用等,各應(yīng)用一般運(yùn)行在獨(dú)立的用戶進(jìn)程中。用戶進(jìn)程包含框架層的各模塊邏輯,其通過框架層的接口以 IPC 調(diào)用的方式使用服務(wù)層的系統(tǒng)服務(wù)。

02. 類間關(guān)系

本段將展示服務(wù)層和用戶進(jìn)程兩部分的 Ability 子系統(tǒng)類關(guān)系圖。

在學(xué)習(xí) Ability 子系統(tǒng)的類圖之前,我們應(yīng)先了解 OpenHarmony 的 IPC 調(diào)用框架圖,這是各系統(tǒng)服務(wù)工作的基礎(chǔ)機(jī)制之一。

0) IPC 框架

目前 OpenHarmony 尚未在源碼全面使用 IDL 來生成 IPC 調(diào)用接口。各系統(tǒng)服務(wù)暫時(shí)采用人工編寫的方式來定義服務(wù)接口,主要的類之間的關(guān)系見下圖:

IPC 框架圖 (UML)

OpenHarmony 源碼解析之 Ability子系統(tǒng) (零)-鴻蒙HarmonyOS技術(shù)社區(qū)

標(biāo)黃的四個(gè)部分是編寫服務(wù)時(shí)需要實(shí)現(xiàn)的四個(gè)類:

  • Interface 是一個(gè)抽象基類,不能實(shí)例化,其用于定義跨進(jìn)程調(diào)用的各函數(shù)的名字 \ 參數(shù)以及返回類型;
  • Proxy 類繼承了 IRemoteProxy 類,其內(nèi)部實(shí)現(xiàn)了 Client 端的各函數(shù),將參數(shù)序列化,并通過 IPC 驅(qū)動(dòng)傳遞到 Server 端,并接收 Server 端的返回值;
  • Stub 類繼承了 IRemoteStub 類,但其仍是抽象類,不能實(shí)例化,其內(nèi)部實(shí)現(xiàn)了將 Client 端傳來的數(shù)據(jù)反序列化,傳遞給對應(yīng)函數(shù),并將返回值序列化,并通過 IPC 驅(qū)動(dòng)傳遞到 Client 端;
  • Service 類繼承了 Stub 類,這是 Server 端的業(yè)務(wù)核心類,用于實(shí)現(xiàn)各接口的真正邏輯。

因代碼量比較多,這里只做簡要介紹。如果希望詳細(xì)了解 IPC 框架的機(jī)制與實(shí)現(xiàn),我們將來也會編寫并分享相關(guān)文檔。

1) 服務(wù)層

Ability 子系統(tǒng)在系統(tǒng)服務(wù)進(jìn)程中的類間關(guān)系如下圖,標(biāo)綠色的類是整個(gè)流程的核心類,藍(lán)色的框體代表與外部模塊進(jìn)行交互,粉色的類代表跨進(jìn)程調(diào)用的接口類:

Ability 子系統(tǒng)服務(wù)層 (UML)

OpenHarmony 源碼解析之 Ability子系統(tǒng) (零)-鴻蒙HarmonyOS技術(shù)社區(qū)

核心類:

AbilityManagerService:

此類是 Ability 子系統(tǒng)的系統(tǒng)服務(wù)的總管。該類實(shí)現(xiàn)了 IAbilityManager 的 Stub 的所有接口,用以執(zhí)行來自用戶進(jìn)程的 IPC 調(diào)用。

Ability 子系統(tǒng)服務(wù)的各功能由各子模塊 (Manager) 負(fù)責(zé),而 AbilityManagerService 中則包含了各子模塊的實(shí)例。

當(dāng)執(zhí)行相應(yīng)的 IPC 調(diào)用時(shí),AbilityManagerService 會調(diào)用相應(yīng)的子模塊的函數(shù)進(jìn)行處理,并將結(jié)果通過 IPC 返回給調(diào)用方。

AbilityRecord:

此類是應(yīng)用 Ability 在系統(tǒng)服務(wù)中的映射。該類持有 IAbilityScheduler 的 Proxy 對象,用以對相應(yīng) Ability 所在進(jìn)程進(jìn)行 IPC 調(diào)用。

前文已介紹,Ability 是應(yīng)用程序的最核心的組件,當(dāng)應(yīng)用的 Ability 在使用時(shí),其會在系統(tǒng)服務(wù)中產(chǎn)生一個(gè)對應(yīng)的 AbilityRecord 對象,記錄了該 Ability 的屬性和狀態(tài),AbilityRecord 對象由 AbilityManagerService 管理,當(dāng)需要操作 \ 調(diào)度 Ability 時(shí),就會調(diào)用相應(yīng)的 AbilityRecord 的函數(shù),并通過 IAbilityScheduler 的 Proxy 調(diào)用到用戶進(jìn)程,使用戶進(jìn)程做出響應(yīng)動(dòng)作 (如生命周期切換等)。

組成 AbilityManagerService 的重要模塊:

AppScheduler:

此類調(diào)用 AppMgrClient 中的接口,用以與用戶進(jìn)程框架 (AppManager) 模塊進(jìn)行交互,Ability 所屬的用戶進(jìn)程即由 AppManager 管理。

AbilityManagerService 持有此類的實(shí)例,用以進(jìn)行與 AppManager 系統(tǒng)服務(wù)間的交互。

AbilityStackManager:

此類掌管所有 FA (Feature Ability),即 Page Ability。

FA 的可見性 \ 層次結(jié)構(gòu)等狀態(tài)由該 Manager 進(jìn)行計(jì)算和調(diào)度,并對相應(yīng)的 AbilityRecord 進(jìn)行操作。

AbilityConnectManager:

此類掌管所有 PA (Particle Ability) 中的 Service Ability。

Service Ability 的連接 \ 生命周期等狀態(tài)由該 Manager 進(jìn)行計(jì)算和調(diào)度,并對相應(yīng)的 AbilityRecord 進(jìn)行操作。

DataAbilityManager:

此類掌管所有 PA (Particle Ability) 中的 Data Ability。

Data Ability 的連接 \ 加載等邏輯由該 Manager 進(jìn)行計(jì)算和調(diào)度,并對相應(yīng)的 AbilityRecord 進(jìn)行操作。

其他主要類:

MissionRecord:

此類對應(yīng)了名為 Mission 的邏輯概念,屬于同一個(gè)邏輯棧的 Page Ability 合為一個(gè) Misson,這些 Ability 的 AbilityRecord 會以棧的形式保存在相應(yīng)的 MissionRecord 中。

MissionRecord 中的 AbilityRecord 順序即是 Mission 中的 Ability 存在順序,該順序與 Ability 的進(jìn)入和退出邏輯相關(guān)。

MissionStack:

此類對應(yīng)了名為 Stack 的邏輯概念,屬于同一個(gè)顯示區(qū)域的 Mission 合為一個(gè) Stack,這些 Mission 的 MissionRecord 會以棧的形式保存在相應(yīng)的 MissionStack 中。

要注意的是,MissionStack 中的 MissionRecord 與 Mission 的順序無關(guān),每個(gè) MissionRecord 會保存其自身的順序關(guān)系。

各 MissionStack 實(shí)例保存在 AbilityStackManager 中,由 AbilityStackManager 進(jìn)行管理。

ConnectionRecord:

當(dāng) Service Ability 被以 connectAbility() 的方式連接時(shí),會在系統(tǒng)層產(chǎn)生一個(gè) ConnectionRecord 對象。ConnectionRecord 用以記錄和控制該 Connection 的數(shù)據(jù)與狀態(tài)。

各 ConnectionRecord 實(shí)例保存在 AbilityConnectManager 中,由 AbilityConnectManager 進(jìn)行管理。

DataAbilityRecord:

當(dāng) Data Ability 被調(diào)用時(shí),會在系統(tǒng)層產(chǎn)生一個(gè) DataAbilityRecord 對象。DataAbilityRecord 用以記錄和控制該 Data Ability 的數(shù)據(jù)與狀態(tài)。

各 DataAbilityRecord 實(shí)例保存在 DataAbilityManager 中,由 AbilityConnectManager 進(jìn)行管理。

2) 用戶進(jìn)程

Ability 子系統(tǒng)在用戶進(jìn)程中的類間關(guān)系如下圖,標(biāo)綠色的類是整個(gè)流程的核心類,藍(lán)色的框體代表與外部模塊進(jìn)行交互,粉色的類代表跨進(jìn)程調(diào)用的接口類:

Ability 子系統(tǒng)用戶進(jìn)程 (UML)

OpenHarmony 源碼解析之 Ability子系統(tǒng) (零)-鴻蒙HarmonyOS技術(shù)社區(qū)

核心類:

AbilityThread:

此類是 Ability 在用戶進(jìn)程中的總管,該類實(shí)現(xiàn)了 IAbilityScheduler 的 Stub 的所有接口,用以執(zhí)行來自系統(tǒng)服務(wù)的 IPC 調(diào)用。

當(dāng)執(zhí)行相應(yīng)的 IPC 調(diào)用時(shí),AbilityThread 會對該 Ability 的數(shù)據(jù)與狀態(tài)進(jìn)行處理,并將結(jié)果通過 IPC 返回給調(diào)用方。

Ability:

該類是應(yīng)用程序的各 Ability 的基類,含有 Ability 運(yùn)作時(shí)所需要的各用戶進(jìn)程中的數(shù)據(jù),并定義了各生命周期切換時(shí)的回調(diào)接口。

Ability 繼承了 AbilityContext 類,AbilityContext 是一個(gè) Context 類,其功能是與系統(tǒng)環(huán)境進(jìn)行交互,可以獲取和改變一些與應(yīng)用有關(guān)的屬性值。

Ability 的實(shí)例被構(gòu)建在 AbilityThread 對象中。

與 AbilityThread \ Ability 交互緊密的重要類:

AbilityHandler:

該類是一個(gè) EventHandler 類,其綁定了該應(yīng)用進(jìn)程的主 EventRunner,用以執(zhí)行應(yīng)用的主消息循環(huán)。

Ability 的主要操作都會 post 到此 EventHandler 循環(huán)中完成。

AbilityHandler 的實(shí)例被構(gòu)建在 AbilityThread 對象中。

AbilityImpl (DataAbilityImpl \ PageAbilityImpl \ ServiceAbilityImpl):

該類用以直接控制對應(yīng)的 Ability 的操作和狀態(tài)。對于三種不同類型的 Ability,AbilityImpl 派生出三種不同的派生類 (DataAbilityImpl \ PageAbilityImpl \ ServiceAbilityImpl),用以差異處理這三類 Ability。

AbilityThread 的實(shí)例被構(gòu)建在 AbilityThread 對象中。

AbilityLoader:

該類用以保存各 Ability 的構(gòu)建函數(shù),當(dāng)通過相應(yīng)的 Ability 的名稱來構(gòu)建時(shí),會由 AbilityLoader 來查詢并調(diào)用其構(gòu)建函數(shù)。

AbilityLoader 使用了單例模式,在用戶進(jìn)程中只有一個(gè)實(shí)例。

AbilityWindow:

該類是 Window 對象的派生類,用以控制對應(yīng) Ability 的圖形界面方面的邏輯,與 OpenHarmony 的圖形子系統(tǒng)進(jìn)行間接交互。

AbilityWindow 會隨者 Ability 的構(gòu)建而構(gòu)建,其實(shí)例存于對應(yīng)的 Ability 對象中。

其他主要類:

MainThread:

該類用于管理應(yīng)用進(jìn)程的數(shù)據(jù)和狀態(tài),是應(yīng)用程序的核心類。該類實(shí)現(xiàn)了 IAppScheduler 的 Stub 的所有接口,用以執(zhí)行來自系統(tǒng)服務(wù)的 IPC 調(diào)用。

MainThread 并不屬于 Ability 子系統(tǒng),而屬于用戶程序框架子系統(tǒng),但該類與 Ability 子系統(tǒng)關(guān)系密切。

Ability 子系統(tǒng)的各類對象 (如 AbilityThread) 的管理,以及 Ability 的創(chuàng)建等流程,都由此類處理。

AbilityRecordMgr:

該類存放了所屬應(yīng)用進(jìn)程的所有 AbilityThread 對象,AbilityThread 被封裝在 LocalAbilityRecord 類中,并以 map 的形式存儲于 AbilityRecordMgr 中。

AbilityRecordMgr 同樣是用戶程序框架子系統(tǒng)的一部分,其實(shí)例存儲在 MainThread 類中。

AbilityManagerClient:

該類是與 AbilityManagerService 交互的橋梁,其持有 IAbilityManager 的 Proxy 對象,用以對 AbilityManagerService 所屬的系統(tǒng)進(jìn)程進(jìn)行 IPC 調(diào)用。

該類被 AbilityContext 等眾多類使用,用來調(diào)用 AbilityManagerService 的各接口,以執(zhí)行控制系統(tǒng)服務(wù)或獲取系統(tǒng)服務(wù)狀態(tài)的邏輯。

03. 總結(jié)

Ability 子系統(tǒng)是支撐鴻蒙應(yīng)用程序運(yùn)行的核心模塊,對于系統(tǒng)開發(fā)者\(yùn) 應(yīng)用開發(fā)者來說,都很有必要去深入了解。

本文檔對 Ability 子系統(tǒng)的功能和結(jié)構(gòu)做了介紹,由于該模塊代碼量較多,邏輯較復(fù)雜,該講解也僅是在框架層面,未深究其細(xì)節(jié)。

如果希望了解更多有關(guān) Ability 子系統(tǒng)的知識,敬請期待我們后續(xù)將要分享的 《OpenHarmony 源碼解析之 Ability 子系統(tǒng) (一)》,在這篇我們會挑選一些 Ability 子系統(tǒng)的局部流程進(jìn)行詳細(xì)講解。

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

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

https://harmonyos.51cto.com

 

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

2022-01-06 16:17:58

鴻蒙HarmonyOS應(yīng)用

2021-11-08 15:04:47

鴻蒙HarmonyOS應(yīng)用

2022-02-17 20:57:07

OpenHarmon操作系統(tǒng)鴻蒙

2021-12-17 16:42:09

鴻蒙HarmonyOS應(yīng)用

2023-04-12 15:31:11

系統(tǒng)服務(wù)管理鴻蒙

2022-01-10 15:30:11

鴻蒙HarmonyOS應(yīng)用

2022-05-10 11:17:27

電話子系統(tǒng)數(shù)據(jù)服務(wù)模塊

2021-11-18 10:28:03

鴻蒙HarmonyOS應(yīng)用

2022-05-24 15:46:51

Wi-FiSTA模式

2021-09-13 15:15:18

鴻蒙HarmonyOS應(yīng)用

2023-04-06 09:14:11

多模輸入子系統(tǒng)鴻蒙

2022-01-13 10:11:59

鴻蒙HarmonyOS應(yīng)用

2023-06-28 15:00:02

開源鴻蒙輸入系統(tǒng)架構(gòu)

2021-09-17 14:38:58

鴻蒙HarmonyOS應(yīng)用

2022-02-14 14:47:11

SystemUIOpenHarmon鴻蒙

2022-01-20 14:33:29

openharmonwayland協(xié)議鴻蒙

2022-03-18 16:07:04

Graphic子系統(tǒng)鴻蒙

2022-05-17 10:42:36

reboot源碼解析

2022-06-13 14:18:39

電源管理子系統(tǒng)耗電量服務(wù)

2021-09-16 15:08:08

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

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