更多信息请访问:与华为官方共建的鸿蒙技术社区https://ost.51cto.com前言方舟开发框架(简称:ArkUI)是一套UI开发框架,为开发者提供应用程序UI开发的必要能力。它提供了跨平台的能力,集成了类Web开发范式和声明式开发范式两种开发范式。框架分为应用层、框架层、渲染引擎、平台适配和桥接层。本文主要简单介绍适配层的一些核心类,并通过这些核心类的关系图和流程交互描述,一窥适配层的部分内容。CoreClasses介绍类关系图AceEngine:全球唯一,为实例提供opener注册和垃圾回收能力,同时作为AceContainer的容器。AceContainer:顾名思义,是一个容器类,由前端、任务执行器、资源管理器、渲染管线、视图等组成,提供生命周期对接、函数调度接口、UI渲染等各种能力,并且是平台适配非常重要的模块。AceAbility:对应FA模型中的PageAbility,是用户具体可以看到并与之交互的Ability实例。Frontend:前端框架的抽象,由DeclarativeFrontend、JsFrontend和CardFrontend继承,实现声明式、WEB-like和Card方法的实现。PlatformEventCallback:平台事件回调的抽象。不同的能力实现自己的回调接口。目前只支持OnFinish和OnStatusBarBgColorChanged事件的回调。AssetManager:资源管理器的抽象,由FlutterAssetManager实现,最终由FileAssetProvider提供加载资源文件。AceView:Render生成视图节点。TaskExecutor:任务管理器。PipelineContext:渲染管线。PlatformResRegister:平台资源的注册和管理,通过接口回调实现平台层的渲染。协作说明这里我们通过一个APP窗口大小变化的典型实现过程来帮助大家理解ACE框架类是如何交互的。方法。根据能力ID获取对应的AceContainer。从AceContainer获取TaskExecutor任务管理器。通过任务管理器创建任务。从AceContainer获取当前视图。调用FlutterAceView::SurfaceChanged处理界面变化。FlutterAceView回调AceContainer注册的viewChangeCallback方法。viewChangeCallback从PipelineContext渲染管道对象中获取TaskExecutor任务管理器。通过任务管理器创建任务。task方法调用渲染管线PipelineContext::OnSurfaceChanged方法进行处理。渲染管线最终调用前端框架OnSurfaceChanged来处理界面变化。关键代码实现:AceAbility继承自OHOS::Rosen::IWindowChangeListener,在OnStart启动时向windows对象注册为监听器。voidAceAbility::OnStart(constWant&want){...//注册表面变化回调OHOS::sptrthisAbility(this);窗口->RegisterWindowChangeListener(thisAbility);...}当界面改变时,WindowImpl::UpdateRect调用监听器的OnSizeChange进程。voidWindowImpl::UpdateRect(conststructRect&rect,WindowSizeChangeReasonreason){...for(auto&listener:windowChangeListeners_){if(listener!=nullptr){listener->OnSizeChange(rect,reason);}}...}AceAbility::OnSizeChange()。voidAceAbility::OnSizeChange(OHOS::Rosen::Rectrect,OHOS::Rosen::WindowSizeChangeReasonreason){autocontainer=Platform::AceContainer::GetContainer(abilityId_);...autotaskExecutor=container->GetTaskExecutor();...taskExecutor->PostTask([rect,abilityId=abilityId_,density=density_,reason](){...autoflutterAceView=static_cast(container->GetView());...Platform::FlutterAceView::SurfaceChanged(flutterAceView,width,height,0,static_cast(reason));},TaskExecutor::TaskType::PLATFORM);}Platform::FlutterAceView::SurfaceChanged()。voidFlutterAceView::SurfaceChanged(FlutterAceView*view,int32_twidth,int32_theight,int32_torientation,WindowSizeChangeReasontype){...view->NotifySurfaceChanged(width,height,type);}autoplatformView=view->GetShellHolder()->GetPlatformView();如果(platformView){platformView->NotifyChanged(SkISize::Make(width,height));}...}viewChangeCallback()回调函数。auto&&viewChangeCallback=[context=pipelineContext_,id=instanceId_](int32_twidth,int32_theight,WindowSizeChangeReasontype){ContainerScopescope(id);ACE_SCOPED_TRACE("ViewChangeCallback(%d,%d)",宽度,高度);context->GetTaskExecutor()->PostTask([context,width,height,type](){context->OnSurfaceChanged(width,height,type);},TaskExecutor::TaskType::UI);};aceView_->RegisterViewChangeCallback(viewChangeCallback);PipelineContext::OnSurfaceChanged()。voidPipelineContext::OnSurfaceChanged(int32_twidth,int32_theight,WindowSizeChangeReasontype){...autofrontend=weakFrontend_.Upgrade();如果(前端){前端->OnSurfaceChanged(宽度,高度);}...}extendsOpenHarmony用户程序的开发本质上就是Ability的开发。OpenHarmony系统通过对Ability进行调度,结合系统提供的一致性调度契约来管理Ability的生命周期,从而实现对用户程序的调度。Ability框架在API8及更早版本中使用FA模型。FA模型中的Ability分为PageAbility、ServiceAbility、DataAbility和FormAbility。其中:PageAbility是ArkUI实现的一个Ability,是一个对用户可见和交互的Ability实例。ServiceAbility也是Ability的一种,只是没有UI,提供其他Ability调用自定义服务,后台运行。DataAbility也是一种没有UI的Ability。提供数据增删改查服务的其他能力,后台运行。FormAbility是一种卡片Ability,是一种界面展示形式。AceAbility对应FA模型中的PageAbility,与AceContainer容器类结合管理。其他几种能力分别对应ACE框架中的AceDataAbility、AceFormAbility和AceServiceAbility,由PaContainer容器类管理。AceContainer是一个聚合了前端、渲染管线、任务执行器等核心功能的容器。相当于一个大管理者,能力的关键流程都要通过它来调度。通过Frontend、PlatformEventCallback、AssetManager、AceView等抽象类,提供平台的抽象,扩展实现以满足不同平台的适配。参考链接Arkui开发框架概述:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ui/arkui-overview.md。能力框架概述: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。更多信息请访问:与华为官方共建的鸿蒙技术社区https://ost.51cto.com