成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[424757]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 00. 簡介

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

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

Ability 子系統實現了對 Ability 的運行及生命周期進行統一的調度和管理,應用進程能夠支撐多個 Ability,Ability 具有跨應用進程間和同一進程內調用的能力。Ability 管理服務統一調度和管理應用中各 Ability,并對Ability的生命周期變更進行管理。

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

OpenHarmony 架構圖:

OpenHarmony 源碼解析之 Ability子系統 (零)-鴻蒙HarmonyOS技術社區

01.基礎知識

Ability 子系統的架構如下圖所示。可以看到其分兩個模塊,其中 Ability Kit 模塊位于 User Process (用戶進程),而 AbilityManagerService 模塊位于 Service Layer (服務層)。這兩個模塊內部由多個相關聯的子模塊組成。

Ability 子系統架構圖:

OpenHarmony 源碼解析之 Ability子系統 (零)-鴻蒙HarmonyOS技術社區

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

0) Ability

Ability 是系統調度應用的最小單元,是能夠完成一個獨立功能的組件,一個應用可以包含一個或多個 Ability。

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

1) Ability 生命周期

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

PageAbility 類型的 Ability 生命周期流轉如下圖所示:

OpenHarmony 源碼解析之 Ability子系統 (零)-鴻蒙HarmonyOS技術社區

ServiceAbility 類型的 Ability 生命周期流轉如下圖所示:

OpenHarmony 源碼解析之 Ability子系統 (零)-鴻蒙HarmonyOS技術社區

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

2) 服務層

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

Ability 子系統在服務層的模塊為 AbilityManagerService。

3) 用戶進程

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

02. 類間關系

本段將展示服務層和用戶進程兩部分的 Ability 子系統類關系圖。

在學習 Ability 子系統的類圖之前,我們應先了解 OpenHarmony 的 IPC 調用框架圖,這是各系統服務工作的基礎機制之一。

0) IPC 框架

目前 OpenHarmony 尚未在源碼全面使用 IDL 來生成 IPC 調用接口。各系統服務暫時采用人工編寫的方式來定義服務接口,主要的類之間的關系見下圖:

IPC 框架圖 (UML)

OpenHarmony 源碼解析之 Ability子系統 (零)-鴻蒙HarmonyOS技術社區

標黃的四個部分是編寫服務時需要實現的四個類:

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

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

1) 服務層

Ability 子系統在系統服務進程中的類間關系如下圖,標綠色的類是整個流程的核心類,藍色的框體代表與外部模塊進行交互,粉色的類代表跨進程調用的接口類:

Ability 子系統服務層 (UML)

OpenHarmony 源碼解析之 Ability子系統 (零)-鴻蒙HarmonyOS技術社區

核心類:

AbilityManagerService:

此類是 Ability 子系統的系統服務的總管。該類實現了 IAbilityManager 的 Stub 的所有接口,用以執行來自用戶進程的 IPC 調用。

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

當執行相應的 IPC 調用時,AbilityManagerService 會調用相應的子模塊的函數進行處理,并將結果通過 IPC 返回給調用方。

AbilityRecord:

此類是應用 Ability 在系統服務中的映射。該類持有 IAbilityScheduler 的 Proxy 對象,用以對相應 Ability 所在進程進行 IPC 調用。

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

組成 AbilityManagerService 的重要模塊:

AppScheduler:

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

AbilityManagerService 持有此類的實例,用以進行與 AppManager 系統服務間的交互。

AbilityStackManager:

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

FA 的可見性 \ 層次結構等狀態由該 Manager 進行計算和調度,并對相應的 AbilityRecord 進行操作。

AbilityConnectManager:

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

Service Ability 的連接 \ 生命周期等狀態由該 Manager 進行計算和調度,并對相應的 AbilityRecord 進行操作。

DataAbilityManager:

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

Data Ability 的連接 \ 加載等邏輯由該 Manager 進行計算和調度,并對相應的 AbilityRecord 進行操作。

其他主要類:

MissionRecord:

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

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

MissionStack:

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

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

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

ConnectionRecord:

當 Service Ability 被以 connectAbility() 的方式連接時,會在系統層產生一個 ConnectionRecord 對象。ConnectionRecord 用以記錄和控制該 Connection 的數據與狀態。

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

DataAbilityRecord:

當 Data Ability 被調用時,會在系統層產生一個 DataAbilityRecord 對象。DataAbilityRecord 用以記錄和控制該 Data Ability 的數據與狀態。

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

2) 用戶進程

Ability 子系統在用戶進程中的類間關系如下圖,標綠色的類是整個流程的核心類,藍色的框體代表與外部模塊進行交互,粉色的類代表跨進程調用的接口類:

Ability 子系統用戶進程 (UML)

OpenHarmony 源碼解析之 Ability子系統 (零)-鴻蒙HarmonyOS技術社區

核心類:

AbilityThread:

此類是 Ability 在用戶進程中的總管,該類實現了 IAbilityScheduler 的 Stub 的所有接口,用以執行來自系統服務的 IPC 調用。

當執行相應的 IPC 調用時,AbilityThread 會對該 Ability 的數據與狀態進行處理,并將結果通過 IPC 返回給調用方。

Ability:

該類是應用程序的各 Ability 的基類,含有 Ability 運作時所需要的各用戶進程中的數據,并定義了各生命周期切換時的回調接口。

Ability 繼承了 AbilityContext 類,AbilityContext 是一個 Context 類,其功能是與系統環境進行交互,可以獲取和改變一些與應用有關的屬性值。

Ability 的實例被構建在 AbilityThread 對象中。

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

AbilityHandler:

該類是一個 EventHandler 類,其綁定了該應用進程的主 EventRunner,用以執行應用的主消息循環。

Ability 的主要操作都會 post 到此 EventHandler 循環中完成。

AbilityHandler 的實例被構建在 AbilityThread 對象中。

AbilityImpl (DataAbilityImpl \ PageAbilityImpl \ ServiceAbilityImpl):

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

AbilityThread 的實例被構建在 AbilityThread 對象中。

AbilityLoader:

該類用以保存各 Ability 的構建函數,當通過相應的 Ability 的名稱來構建時,會由 AbilityLoader 來查詢并調用其構建函數。

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

AbilityWindow:

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

AbilityWindow 會隨者 Ability 的構建而構建,其實例存于對應的 Ability 對象中。

其他主要類:

MainThread:

該類用于管理應用進程的數據和狀態,是應用程序的核心類。該類實現了 IAppScheduler 的 Stub 的所有接口,用以執行來自系統服務的 IPC 調用。

MainThread 并不屬于 Ability 子系統,而屬于用戶程序框架子系統,但該類與 Ability 子系統關系密切。

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

AbilityRecordMgr:

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

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

AbilityManagerClient:

該類是與 AbilityManagerService 交互的橋梁,其持有 IAbilityManager 的 Proxy 對象,用以對 AbilityManagerService 所屬的系統進程進行 IPC 調用。

該類被 AbilityContext 等眾多類使用,用來調用 AbilityManagerService 的各接口,以執行控制系統服務或獲取系統服務狀態的邏輯。

03. 總結

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

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

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

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-01-06 16:17:58

鴻蒙HarmonyOS應用

2022-02-17 20:57:07

OpenHarmon操作系統鴻蒙

2021-11-08 15:04:47

鴻蒙HarmonyOS應用

2021-12-17 16:42:09

鴻蒙HarmonyOS應用

2023-04-12 15:31:11

系統服務管理鴻蒙

2022-01-10 15:30:11

鴻蒙HarmonyOS應用

2022-05-10 11:17:27

電話子系統數據服務模塊

2021-11-18 10:28:03

鴻蒙HarmonyOS應用

2022-05-24 15:46:51

Wi-FiSTA模式

2021-09-13 15:15:18

鴻蒙HarmonyOS應用

2023-04-06 09:14:11

多模輸入子系統鴻蒙

2022-01-13 10:11:59

鴻蒙HarmonyOS應用

2023-06-28 15:00:02

開源鴻蒙輸入系統架構

2021-09-17 14:38:58

鴻蒙HarmonyOS應用

2022-02-14 14:47:11

SystemUIOpenHarmon鴻蒙

2022-01-20 14:33:29

openharmonwayland協議鴻蒙

2022-03-18 16:07:04

Graphic子系統鴻蒙

2022-05-17 10:42:36

reboot源碼解析

2022-06-13 14:18:39

電源管理子系統耗電量服務

2021-09-16 15:08:08

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 琪琪午夜伦伦电影福利片 | 国产性生活一级片 | 天天干天天操天天爽 | 国产精品小视频在线观看 | 国产精品亚洲精品 | 91一区二区三区在线观看 | av中文字幕在线 | 日日摸日日碰夜夜爽2015电影 | 一区二区三区免费在线观看 | 成人片免费看 | 欧美一区二区三区在线播放 | 九色在线 | 精品久久香蕉国产线看观看亚洲 | 日韩在线视频精品 | 一区二区精品 | 亚洲视频在线观看 | 久久大陆 | 久久电影一区 | 欧美精品一区在线 | 欧美日韩电影一区 | 日韩精品在线观看视频 | 久久人爽 | 亚洲综合在线视频 | 一级黄色av电影 | 在线视频 欧美日韩 | 国产精品日韩在线观看 | 精品一区二区三区四区 | 国产伦精品一区二区三区视频金莲 | 日韩国产在线 | 自拍偷拍第1页 | 国产高清在线精品一区二区三区 | 欧美精品一区二区三区四区五区 | 日本在线观看视频 | 久久久免费观看视频 | 国产毛片在线看 | 国产电影一区二区 | 日韩美av | 国产一区二区 | 久久伦理电影 | 91大神在线资源观看无广告 | 亚洲第一在线 |