日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
OpenHarmony源碼解析之Ability子系統(tǒng)(零)

想了解更多內(nèi)容,請訪問:

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

https://harmonyos.

 00. 簡介

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

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

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

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

OpenHarmony 架構(gòu)圖:

01.基礎(chǔ)知識

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

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

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

0) Ability

Ability 是系統(tǒng)調(diào)度應(yīng)用的最小單元,是能夠完成一個獨立功能的組件,一個應(yīng)用可以包含一個或多個 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 等各個狀態(tài)的統(tǒng)稱 (主要涉及 PageAbility 類型和 ServiceAbility 類型的 Ability)。

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

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

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

2) 服務(wù)層

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

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

3) 用戶進程

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

02. 類間關(guān)系

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

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

0) IPC 框架

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

IPC 框架圖 (UML)

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

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

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

1) 服務(wù)層

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

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

核心類:

AbilityManagerService:

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

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

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

AbilityRecord:

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

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

組成 AbilityManagerService 的重要模塊:

AppScheduler:

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

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

AbilityStackManager:

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

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

AbilityConnectManager:

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

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

DataAbilityManager:

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

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

其他主要類:

MissionRecord:

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

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

MissionStack:

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

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

各 MissionStack 實例保存在 AbilityStackManager 中,由 AbilityStackManager 進行管理。

ConnectionRecord:

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

各 ConnectionRecord 實例保存在 AbilityConnectManager 中,由 AbilityConnectManager 進行管理。

DataAbilityRecord:

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

各 DataAbilityRecord 實例保存在 DataAbilityManager 中,由 AbilityConnectManager 進行管理。

2) 用戶進程

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

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

核心類:

AbilityThread:

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

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

Ability:

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

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

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

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

AbilityHandler:

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

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

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

AbilityImpl (DataAbilityImpl \ PageAbilityImpl \ ServiceAbilityImpl):

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

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

AbilityLoader:

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

AbilityLoader 使用了單例模式,在用戶進程中只有一個實例。

AbilityWindow:

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

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

其他主要類:

MainThread:

該類用于管理應(yīng)用進程的數(shù)據(jù)和狀態(tài),是應(yīng)用程序的核心類。該類實現(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)用進程的所有 AbilityThread 對象,AbilityThread 被封裝在 LocalAbilityRecord 類中,并以 map 的形式存儲于 AbilityRecordMgr 中。

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

AbilityManagerClient:

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

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

03. 總結(jié)

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

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

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

想了解更多內(nèi)容,請訪問:

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

https://harmonyos.


標(biāo)題名稱:OpenHarmony源碼解析之Ability子系統(tǒng)(零)
瀏覽路徑:http://m.5511xx.com/article/dhsosph.html