作者:钟寓宛筠 | 来源:互联网 | 2024-11-19 13:48
本文深入探讨了Flutter的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。
Flutter 混合开发模式主要分为两种:统一管理模式和三端分离模式。统一管理模式指的是在一个标准的 Flutter Application 工程中,Flutter 的产物工程目录(如 ios/
和 android/
)可以直接进行原生混编。这种方式适合 Flutter 业务为主导、原生功能为辅的项目,但随着原生业务的增长,耦合度会增加,维护难度加大。
相比之下,三端分离模式通过 Flutter Module 将 Flutter 以模块化的方式引入原生工程中,生成 iOS 下的 Framework 或 Pods、Android 下的 AAR,从而实现真正的三端分离。这种方式更适合大型项目,能够有效降低耦合度,提高开发效率。
混合栈原理
混合栈主要涉及四种场景的处理:Native 跳转 Flutter、Flutter 跳转 Flutter、Flutter 跳转 Native 和 Native 跳转 Native。每种场景都有不同的实现方式和挑战。例如,Native 跳转 Flutter 相对简单,可以通过 FlutterViewController 或 FlutterView 实现;而 Flutter 跳转 Native 则需要通过 MethodChannel 进行 Dart 与原生平台的通信。
混合模式框架
为了解决混合栈问题,业内提出了一些混合栈框架,主要包括:
- Flutter Boost:采用类似 WebView 的导航栈,每次打开 Flutter 页面都会创建一个新的 FlutterViewController,逻辑简单但内存开销较大。
- Flutter Thrio:优化了 Flutter 跳转 Flutter 的场景,使用 Flutter Navigator 导航栈,减少了内存开销,但实现更为复杂。
- 多 Engine 模式:每个 Engine 内有若干个 FlutterVC,Engine 之间隔离,但资源消耗大,通信复杂。
- View 级别的混合模式:通过为每个 window 加入 windowId,实现多个 FlutterVC 共享同一个 isolate,减少内存开销,但需要修改 Engine 代码,维护成本高。
多 Engine 模式的细节
多 Engine 模式中,每个 Engine 对应一个 isolate 对象,Engine 之间相互隔离,没有共享内存的并发,不存在死锁问题。然而,启动多个 Engine 会导致资源消耗过多,维护两套缓存池也会增加资源开销。
View 级别的混合模式
基于 View 级别的混合模式通过为每个 window 加入 windowId,实现多个 FlutterVC 共享同一个 isolate,从而减少内存开销。虽然这种方式可以实现更高效的混合开发,但需要对 Engine 代码进行修改,维护成本较高。
编译模式
Dart 支持 JIT 和 AOT 两种编译模式。JIT 模式适用于开发和调试阶段,AOT 模式则用于生产环境,可以提高应用的启动速度和运行性能。在混合开发中,选择合适的编译模式对提升应用性能至关重要。