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

OpenHarmony-UI框架適配層淺析之一

系統 OpenHarmony
本文主要對適配層的部分核心類進行簡單介紹,通過這些核心類的關系圖和流程交互說明來一窺適配層的部分面貌。

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

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

??https://ost.51cto.com??

前言

方舟開發框架(簡稱:ArkUI),是一套UI開發框架,提供開發者進行應用UI開發時所必須的能力。提供跨平臺能力,集成了類Web開發范式與聲明式開發范式兩種開發范式。框架分為應用層、框架層、渲染引擎、平臺適配和橋接層。本文主要對適配層的部分核心類進行簡單介紹,通過這些核心類的關系圖和流程交互說明來一窺適配層的部分面貌。

核心類簡介

類關系圖

  • AceEngine: 全局唯一,提供實例的開門狗注冊、垃圾回收能力,同時也作為AceContainer的容器。
  • AceContainer:顧名思義,是一個容器類,由前端、任務執行器、資源管理器、渲染管線、視圖等聚合而成,提供了生命周期對接、功能調度接口和UI渲染的各項能力,是平臺適配中非常重要的模塊。
  • AceAbility: 對應的是FA模型中的PageAbility,是用戶具體可見并可以交互的Ability實例。
  • Frontend: 前端框架的抽象,由DeclarativeFrontend、JsFrontend和CardFrontend繼承來實現聲明式、類WEB及Card方式的實現。
  • PlatformEventCallback:平臺事件回調的抽象,不同ability實現各自的回調接口。目前僅支持OnFinish和OnStatusBarBgColorChanged兩個事件的回調。
  • AssetManager: 資源管理器的抽象,由FlutterAssetManager實現,最終由FileAssetProvider提供資源文件加載。
  • AceView: 渲染生成視圖節點。
  • TaskExecutor: 任務管理器。
  • PipelineContext: 渲染管線。
  • PlatformResRegister: 平臺資源的注冊和管理,通過接口回調實現平臺層的渲染。

協作說明

這里我們以一個典型的APP窗口尺寸發生變化的實現流程來幫助大家理解ACE框架類之間是如何交互的,參見時序圖:

步驟說明:

  1. WindowImpl窗口對象感知窗口發生變化,調用監聽者的OnSizeChange方法。
  2. 根據ability ID獲取對應的AceContainer。
  3. 從AceContainer中獲取TaskExecutor任務管理器。
  4. 通過任務管理器創建任務。
  5. 從AceContainer中獲取當前View。
  6. 調用FlutterAceView::SurfaceChanged處理界面的變化。
  7. FlutterAceView回調AceContainer注冊的viewChangeCallback方法。
  8. viewChangeCallback從PipelineContext渲染管線對象中獲取TaskExecutor任務管理器。
  9. 通過任務管理器創建任務。
  10. 任務方法調用渲染管線PipelineContext::OnSurfaceChanged方法處理。
  11. 渲染管線最終調用前端框架OnSurfaceChanged處理界面發生的變化。

關鍵代碼實現:

AceAbility繼承自OHOS::Rosen::IWindowChangeListener,作為監聽者在OnStart啟動的時候向windows對象進行了注冊。

void AceAbility::OnStart(const Want& want) {
...
// register surface change callback
OHOS::sptr<OHOS::Rosen::IWindowChangeListener> thisAbility(this);
window->RegisterWindowChangeListener(thisAbility);
...
}

當界面發生變化,WindowImpl::UpdateRect調用監聽者的OnSizeChange處理。

void WindowImpl::UpdateRect(const struct Rect& rect, WindowSizeChangeReason reason)
{
...
for (auto& listener : windowChangeListeners_) {
if (listener != nullptr) {
listener->OnSizeChange(rect, reason);
}
...
}

AceAbility::OnSizeChange()。

void AceAbility::OnSizeChange(OHOS::Rosen::Rect rect, OHOS::Rosen::WindowSizeChangeReason reason)
{
auto container = Platform::AceContainer::GetContainer(abilityId_);
...
auto taskExecutor = container->GetTaskExecutor();
...
taskExecutor->PostTask([rect, abilityId = abilityId_, density = density_, reason]() {
...
auto flutterAceView = static_cast<Platform::FlutterAceView*>(container->GetView());
...
Platform::FlutterAceView::SurfaceChanged(
flutterAceView, width, height, 0, static_cast<WindowSizeChangeReason>(reason));
}, TaskExecutor::TaskType::PLATFORM);
}

Platform::FlutterAceView::SurfaceChanged()。

void FlutterAceView::SurfaceChanged(
FlutterAceView* view, int32_t width, int32_t height, int32_t orientation, WindowSizeChangeReason type)
{
...
view->NotifySurfaceChanged(width, height, type);
auto platformView = view->GetShellHolder()->GetPlatformView();
if (platformView) {
platformView->NotifyChanged(SkISize::Make(width, height));
}
...
}

viewChangeCallback()回調函數。

auto&& viewChangeCallback = [context = pipelineContext_, id = instanceId_](
int32_t width, int32_t height, WindowSizeChangeReason type) {
ContainerScope scope(id);
ACE_SCOPED_TRACE("ViewChangeCallback(%d, %d)", width, height);
context->GetTaskExecutor()->PostTask(
[context, width, height, type]() { context->OnSurfaceChanged(width, height, type); },
TaskExecutor::TaskType::UI);
};
aceView_->RegisterViewChangeCallback(viewChangeCallback);

PipelineContext::OnSurfaceChanged()。

void PipelineContext::OnSurfaceChanged(int32_t width, int32_t height, WindowSizeChangeReason type)
{
...
auto frontend = weakFrontend_.Upgrade();
if (frontend) {
frontend->OnSurfaceChanged(width, height);
}
...
}

延伸

OpenHarmony用戶程序的開發本質上就是開發Ability。OpenHarmony系統是通過對Ability調度,結合系統提供的一致性調度契約對Ability進行生命周期管理,從而實現對用戶程序的調度。

Ability框架在API 8及更早版本使用FA模型。FA模型中Ability分為PageAbility、ServiceAbility、DataAbility、FormAbility幾種類型。其中:

  • PageAbility是具備ArkUI實現的Ability,是用戶具體可見并可以交互的Ability實例。
  • ServiceAbility也是Ability一種,但是沒有UI,提供其他Ability調用自定義的服務,在后臺運行。
  • DataAbility也是沒有UI的Ability,提供其他Ability進行數據的增刪查服務,在后臺運行。
  • FormAbility是卡片Ability,是一種界面展示形式。

AceAbility對應的是FA模型中的PageAbility,和AceContainer容器類搭配管理。其它幾種ability在ACE框架中分別對應AceDataAbility、AceFormAbility和AceServiceAbility,使用PaContainer容器類進行管理,關系如下圖:

小結

  1. AceAbility是帶UI界面的Ability,非UI界面的ability是AceDataAbility、AceFormAbility和AceServiceAbility。
  2. AceContainer是一個容器,聚合了前端、渲染管線和任務執行器等核心功能,相當于一個大總管,ability的關鍵流程都要經過它調度。
  3. 通過Frontend、PlatformEventCallback、AssetManager和AceView等抽象類,提供了對平臺的抽象,通過擴展實現,滿足不同平臺的適配。

參考鏈接

方舟開發框架概述:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ui/arkui-overview.md。

Ability框架概述:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ability/ability-brief.md。

FA模型綜述:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ability/fa-brief.md。

OpenHarmony 源碼解析之ACE:

https://ost.51cto.com/posts/7908。

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

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

??https://ost.51cto.com??

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

2022-02-28 14:54:48

openHarmon鴻蒙操作系統

2023-01-04 15:24:46

ACE組件UI布局

2022-04-01 16:04:33

Harmonytabs容器鴻蒙

2022-05-16 11:50:45

HDF驅動框架

2022-03-15 15:24:53

操作系統RTOSAT模塊

2013-12-02 13:59:22

jQueryUI

2009-07-20 17:01:11

Struts2.0+i

2014-07-28 16:05:42

云適配

2010-03-26 09:16:44

2023-02-07 15:52:50

2016-10-20 19:27:00

開源項目bootstrapcss框架

2009-07-16 09:14:26

iBATIS DAO

2009-09-14 16:46:15

LINQ to XML

2009-09-22 13:09:06

Hibernateorm框架

2023-06-27 15:12:46

C++三方庫移植

2022-03-07 15:22:16

classHarmony鴻蒙

2012-02-20 09:54:35

ibmdw

2022-04-01 15:18:04

HarmonyHDF 驅動鴻蒙

2022-05-30 15:21:27

Hi3861TCP通信

2009-07-15 14:21:03

MyEclipse S
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 喷水毛片 | 色久伊人| 国产成人精品一区二区三 | 久久亚洲综合 | japanhd美女动 | 久久综合成人精品亚洲另类欧美 | 欧美激情视频一区二区三区在线播放 | 成人免费一级视频 | 一区二区三区视频在线观看 | 成人精品鲁一区一区二区 | 国产成人免费视频网站高清观看视频 | 红桃视频一区二区三区免费 | a黄视频 | 亚洲精品免费视频 | 一区二区三区四区日韩 | 色婷婷精品久久二区二区蜜臂av | 高清视频一区二区三区 | 国产精品久久久久久久久免费 | 国产精品久久久久久影院8一贰佰 | 国产日产精品一区二区三区四区 | 91国产在线播放 | 91免费在线看 | 午夜精品久久久久久久久久久久久 | 蜜桃日韩 | 国产日韩一区二区 | 久久精品视频在线免费观看 | 午夜影院在线 | 欧美一区二区三区 | 99视频在线免费观看 | 亚洲精品自拍视频 | 黑人精品xxx一区一二区 | 国产精品久久久久久久久免费桃花 | 91久久| 亚洲电影第三页 | 日韩在线播放av | 国产9999精品 | 2020国产在线| 国产精品久久久久久久久图文区 | 成人无遮挡毛片免费看 | 欧美成人h版在线观看 | 国产一区二区三区高清 |