返回
揭秘 Flutter 之 Dart 虚拟机启动
Android
2023-10-18 04:01:34
引言
在探索 Flutter 之 Engine 启动流程时,我们了解到 Engine 的启动涉及 Dart VM 的创建和调用入口函数 main。本文将深入探讨 Dart VM 的启动过程,揭开其创建和初始化的机制。
创建 Dart VM
Dart VM 的创建过程与平台密切相关。在 Android 平台上,通过调用 Dart_CreateIsolate
函数创建 Dart VM,而 iOS 平台上则使用 Dart_CreateIsolateGroup
函数。
Android
Dart_Isolate isolate = Dart_CreateIsolate(
"my_isolate", // 标识符
script_uri, // 脚本 URI
nullptr, // 包含应用程序代码的 buffer
nullptr, // 传递给 main() 的数据
nullptr // 错误处理程序
);
iOS
Dart_Isolate isolate_group = Dart_CreateIsolateGroup(
"my_isolate_group", // 标识符
script_uri, // 脚本 URI
nullptr, // 包含应用程序代码的 buffer
nullptr, // 传递给 main() 的数据
nullptr // 错误处理程序
);
创建成功后,Dart VM 将初始化其内部数据结构,包括堆、栈和垃圾收集器。
初始化 Dart VM
Dart VM 初始化涉及多个步骤,包括:
- 加载应用程序代码: Dart VM 从指定的脚本 URI 加载应用程序代码。
- 编译代码: 加载的代码被编译成 Dart 字节码。
- 创建入口点: Dart VM 为
main
函数创建入口点。 - 设置参数: 将传递给
main
函数的数据作为参数传递。 - 启动执行: Dart VM 启动执行
main
函数,从而启动 Flutter 应用程序。
Android 和 iOS 的差异
Dart VM 在 Android 和 iOS 平台上的创建和初始化过程略有不同。
在 Android 上,每个 isolate
都对应一个单独的 Dart VM。而 iOS 上,Dart VM 由一个称为 isolate group
的机制管理,其中包含多个 isolate
。
结论
了解 Dart VM 的创建和初始化过程对于深入理解 Flutter 的底层运行机制至关重要。通过本文,我们揭开了 Dart VM 启动过程的面纱,探索了其创建、初始化和跨平台差异的机制。掌握这些知识将有助于读者开发出更强大、更高效的 Flutter 应用程序。