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

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

新聞中心

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

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

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

https://harmonyos.

 00. 簡(jiǎn)介

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

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

Ability 子系統(tǒng)實(shí)現(xiàn)了對(duì) 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,并對(duì)Ability的生命周期變更進(jìn)行管理。

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

OpenHarmony 架構(gòu)圖:

01.基礎(chǔ)知識(shí)

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

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

要理解 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) 兩種類(lèi),其中 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)稱(chēng) (主要涉及 PageAbility 類(lèi)型和 ServiceAbility 類(lèi)型的 Ability)。

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

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

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

2) 服務(wù)層

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

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

3) 用戶(hù)進(jìn)程

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

02. 類(lèi)間關(guān)系

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

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

0) IPC 框架

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

IPC 框架圖 (UML)

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

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

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

1) 服務(wù)層

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

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

核心類(lèi):

AbilityManagerService:

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

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

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

AbilityRecord:

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

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

組成 AbilityManagerService 的重要模塊:

AppScheduler:

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

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

AbilityStackManager:

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

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

AbilityConnectManager:

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

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

DataAbilityManager:

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

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

其他主要類(lèi):

MissionRecord:

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

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

MissionStack:

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

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

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

ConnectionRecord:

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

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

DataAbilityRecord:

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

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

2) 用戶(hù)進(jìn)程

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

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

核心類(lèi):

AbilityThread:

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

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

Ability:

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

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

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

與 AbilityThread \ Ability 交互緊密的重要類(lèi):

AbilityHandler:

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

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

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

AbilityImpl (DataAbilityImpl \ PageAbilityImpl \ ServiceAbilityImpl):

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

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

AbilityLoader:

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

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

AbilityWindow:

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

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

其他主要類(lèi):

MainThread:

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

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

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

AbilityRecordMgr:

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

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

AbilityManagerClient:

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

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

03. 總結(jié)

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

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

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

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

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

https://harmonyos.


當(dāng)前文章:OpenHarmony源碼解析之Ability子系統(tǒng)(零)
轉(zhuǎn)載來(lái)于:http://m.5511xx.com/article/dhsosph.html