页面首次创建流程介绍
流程示意
- 框架初始化:主要初始化框架的上下文环境,包括containter容器、pipeline渲染管线、rootNode根节点等;
- 页面加载:在框架初始化完成后,会执行页面文件,页面文件执行时会生成后端的页面节点树,并挂载到渲染管线的根节点上;
- 布局渲染:页面节点挂载完成后,会触发相应的布局和渲染任务,进行布局渲染。
下面分别从这三个阶段具体展开进行分析说明。
框架初始化
Ability初始化
Ability是系统调度应用的最小单元,通过JS引擎隔离开发者代码。其中,每个Ability都有自己的UI线程,实现并行渲染。
- 初始化当前进程
std::call_once(onceFlag, [abilityContext, cacheDir]() {
LOGI("Initialize for current process.");
SetHwIcuDirectory();
Container::UpdateCurrent(INSTANCE_ID_PLATFORM);
CapabilityRegistry::Register();
AceApplicationInfo::GetInstance().SetPackageName(abilityContext->GetBundleName());
AceApplicationInfo::GetInstance().SetDataFileDirPath(abilityContext->GetFilesDir());
AceApplicationInfo::GetInstance().SetApiTargetVersion(abilityContext->GetApplicationInfo()->apiTargetVersion);
AceApplicationInfo::GetInstance().SetAppVersionName(abilityContext->GetApplicationInfo()->versionName);
AceApplicationInfo::GetInstance().SetAppVersionCode(abilityContext->GetApplicationInfo()->versionCode);
AceApplicationInfo::GetInstance().SetUid(IPCSkeleton::GetCallingUid());
AceApplicationInfo::GetInstance().SetPid(IPCSkeleton::GetCallingPid());
ImageCache::SetImageCacheFilePath(cacheDir);
ImageCache::SetCacheFileInfo();
AceEngine::InitJsDumpHeadSignal();
});
- 添加监听器:添加各种Listener
window->RegisterWindowChangeListener(aceWindowListener);
// register drag event callback
window->RegisterDragListener(aceWindowListener);
// register Occupied Area callback
window->RegisterOccupiedAreaChangeListener(aceWindowListener);
// register ace ability handler callback
window->SetAceAbilityHandler(aceWindowListener);
// register input consumer callback
std::shared_ptr<AceWindowListe