Shell是Flutter Engine的“中枢神经体系”,包含了多个组件,并承继它们相应的Delegate类。
- 代码地址: github.com/flutter/eng…

Shell::Create
当Flutter应用程序启动后,调用 Shell::Create 同步的创立一个shell实例。是体系进入Engine模块的进口函数
- android_shell_holder.cc 对应Android
- FlutterEngine.mm 对应iOS/MacOS
- embedder_engine.cc对应嵌入式
- engine.cc 对应fuchsia体系
platform_runner = fml::MessageLoop::GetCurrent().GetTaskRunner();
raster_runner = thread_host_->raster_thread->GetTaskRunner();
ui_runner = thread_host_->ui_thread->GetTaskRunner();
io_runner = thread_host_->io_thread->GetTaskRunner();
Platform、raster、UI、IO线程
Shell管理着四个线程
- Platform线程
- APP的主线程
- 对应MessageLoop: 相似iOS和Android体系中的Runloop, 有工作的时候干工作,没工作的时候休眠。
- UI 线程: Engine运转与这个线程, 调度帧、推送layer tree用于烘托、请求解压图片并提交到GPU等工作。
- raster线程
- 光栅化(Rasterizer), 从Engine(UI)中提交layer tree给GPU制作
- IO线程
Create 函数履行流程

Shell 创立过程

Engine
Engine类是Shell的组成部分之一,运转于UI线程。其主要功用是管理根Isolate和它的运转时。每个Shell只能具有一个Engine实例。Flutter应用的根Isolate会获取“窗口”绑定。通过这些绑定,能够调度帧、推送layer tree用于烘托、请求解压图片并提交到GPU等等。 Engine管理根Isolate的悉数生命周期。当Engine被收回时,其持有者会认为根Isolate已经封闭且资源已经被收回。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。