多个 Flutter实例
多个 Flutter 页面或视图
集成到现有应用chevron_right添加多个 Flutter 引擎
使用场景
如果你正在将 Flutter 集成到现有应用,或者正在将原生应用逐渐迁移到使用 Flutter,你可能会需要在一个工程中添加多个 Flutter 实例,特别是在下述场景下,多 Flutter 实例可能更为有用:
- 集成了 Flutter 界面的应用,其位置并不在路由栈的叶子节点上,且其可能是混合路由栈,即 native -> Flutter -> native -> Flutter。
- 多个 Flutter view 同时集成在同一个页面上,且同时显示。
使用多个 Flutter 实例的优势在于,每一个实例互相独立,各自维护路由栈、UI 和应用状态。这简化了应用程序整体的状态保持考虑,并且进一步模块化。了解更多关于多个 Flutter 使用的动机和场景,请查看 RFC 文档: Multiple Flutters。
Flutter 针对多 Flutter 实例进行了优化,额外增加的 Flutter 实例只会增加约 180K 的内存占用,这种「固定成本」的降低,可以帮助你更轻松的将 Flutter 加入到现有应用 (add-to-app)。
组件
在 Android 和 iOS 上添加多个 Flutter 实例的主要 API 是基于新的 FlutterEngineGroup 类 (Android API, iOS API) 来创建 FlutterEngine 的,而不是通过以前的 FlutterEngine 构造。
尽管 FlutterEngine API 的用法简洁明了,但从 FlutterEngineGroup 生成的 FlutterEngine 具有常用共享资源(例如 GPU 上下文、字体度量和隔离线程的快照)的性能优势,从而加快首次渲染的速度、降低延迟并降低内存占用。
- 由 FlutterEngineGroup生成的FlutterEngine可以用来关联 UI 相关的类,例如FlutterActivity或FlutterViewController,与通常构造缓存的FlutterEngine类似。
- 第一个 FlutterEngineGroup生成的FlutterEngine不需要持续保活,只要有 1 个可用的FlutterEngine,就可以随时在各个FlutterEngine之间共享资源。
- 通过 FlutterEngineGroup生成的首个FlutterEngine与使用先前的构造方法构造的FlutterEngine有相同的性能特征。
- 当所有由 FlutterEngineGroup构造的FlutterEngine都被销毁后,下一个创建的FlutterEngine与首个创造的性能特征相同。
- FlutterEngineGroup本身不需要持续保活。将其销毁后,已生成的- FlutterEngine不受影响,但无法继续在现有共享的基础上创建新引擎。
实例之间相互通讯
多个 Flutter 实例之间相互通讯可以通过 平台通道 或者 Pigeon 进行。可以在 Issue 72009 里查阅我们关于多 Flutter 实例通讯和增强功能计划的路线图。
示例
你可以在 GitHub 仓库 上找到在 Android 和 iOS 上使用 FlutterEngineGroup 的示例。

 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号