1.知识点总结
1. Flutter简介以及Flutter Boost产生的原因
Flutter是一个由C++实现的Flutter Engine和由Dart实现的Framework组成的跨平台的技术框架。
其中,Flutter Engine负责线程管理、Dart VM状态管理以及Dart代码加载等工作。Dart代码所实现的Framework则负责上层业务开发,如Flutter提供的组建等概念就是Framework的范畴。
Flutter开发会遇到的问题,在Flutter页面和原生页面共存的情况下,如何管理路由,以及原生页面与Flutter页面的切换和通信问题。
多引擎模式:多个主Isolate存在。
多引擎模式问题:
- 冗余资源问题,多引擎模式下,每个引擎的Isolate是相互独立的,由于每个引擎底层都维护了一套图片缓存等比较消耗内存的对象,设备的内存消耗是非常严重的。
- 插件注册问题,Flutter插件中,消息传递需要依赖Messenger,而Messenger是由FlutterViewController去实现的。当一个应用中存在多个FlutterViewController时,那么插件的注册和通信会变得混乱而难以维护。
- Flutter组建和原生页面的差异化问题,希望消除两者的差异,否则在进行页面埋点和其他操作时会增加一些额外的工作量。
- 增加页面通信的复杂度,多个引擎实例会让Isolate的管理变得更加复杂。
Flutter Boost是闲鱼技术团队的一个可复用页面的插件,旨在把Flutter容器做成类似浏览器的加载方案。
此方案的基本功能:
- 可复用的通用型混合开发方案
- 支持更加复杂的混合模式,比如支持tab切换的场景
- 无侵入性方案,使用时不再依赖修改Flutter的方案
- 支持页面生命周期统一的管理。
- 具有统一明确的设计概念
2.Flutter Boost的接入
1.在pubspec.yaml中添加Flutter Boost依赖插件。
2.1 Android
1.在settings.gradle中添加绑定
2.在build.gradle中添加依赖
3.MyApplication继承Flutter Application
4.AndroidManifest.xml中生命MyApplication和FlutterBoostActivity
2.2 IOS
3. Flutter Boost架构
页面的定义:
原生端,页面通常是一个ViewController或者Activity;
Flutter端,页面通常是指Flutter组件。
FlutterBoost框架是统一混合工程中的页面概念,或者弱化Flutter组件对应容器页面的概念。当有一个原生页面存在时,FlutterBoost就能保证一定有一个对应的Flutter的容器页面存在???
本质:
由原生容器通过消息驱动Flutter页面容器,从而达到原生容器与Flutter容器同步的目的,而Flutter渲染的内容是由原生容器去驱动的。通过共享同一个引擎的方案,在Dart端引入容器概念,当存在多个Flutter页面时,不通过栈结构去维护现有页面,而是使用扁平化键值对映射的形式去维护当前所有的页面,并且每个页面拥有唯一的ID。
2.疑问点汇总

-
页面容器
- 页面,通常说的页面在 Flutter 中指的是Route,在 Android 中指的是Activity,iOS 中指的是 ViewController。
- Flutter 容器:Flutter 容器提供了 Dart 代码的运行时环境,一般包含容器类、显示视图和引擎三部分:
- FlutterActivity/FlutterViewController:官方提供的显示 Flutter?面容器基础类,FlutterActivity 是 Android 端基础类,FlutterViewController 对应 iOS 端基础类。
- FlutterView:是显示 Flutter Widget 的视图。
- FlutterEngine:是一个用于承载 Flutter 应用的可移植的运行时。它实现了 Flutter 的核心库,包括动画和图形、文件和网络 I/O、可访问性支持、插件架构,以及 Dart 运行时和编译工具链。
- initialRoute:initialRoute 是 Flutter 页面的路由标识。
- Navigator:Navigator 是管理 Route 的类,它通过 Overlay 栈来管理活动的 Route。
- 参考文档:https://www.infoq.cn/article/jFaFiKtQQgsVVqHNixQc 贝壳flutter混合容器实践
-
栈结构
3.参考文档
isolate
|