Flutter Boost 3.0初探
Posted 阿里巴巴淘系技术团队官网博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter Boost 3.0初探相关的知识,希望对你有一定的参考价值。
背景
随着 Flutter 的发展,国内越来越多的 App 开始使用 Flutter 。
为了降低风险,大部分 App 采用渐进式方式引入 Flutter ,在 App 里选几个页面用 Flutter 来编写,但都碰到了相同的问题。
在原生页面和 Flutter 页面共存的情况下,如何管理路由?
官方没有提供这样的解决方案,而 FlutterBoost 就是为了解决这个问题而生。
FlutterBoost 从开源后受到了社区开发者的欢迎,已经有很多 App 使用了 FlutterBoost ,社区开发者也很活跃,提了很多 Issue 和 PR 。
感谢开发者的一路支持和包容,无论是意见反馈还是吐槽,我们都会认真看,会持续关注 Issue 。
使命
FlutterBoost 的使命是让开发者非常简单的在原生 App 中开发 Flutter 页面。
FlutterBoost 做为 Flutter sdk 上层的解决方案,有一定的局限性,我们需要依赖 sdk 更多的开放能力。因此我们同时在做两件事情:
▐ 推动 Flutter 官方开放更多的底层接口
我们参与 Flutter 组织的 Multiple Flutters[1] 的讨论,也多次发邮件给 Flutter 团队反馈 sdk 的 Bug 和一些无法支持的应用场景。
很欣慰的是在 Flutter 2.0 上看到混合开发的重大进展。
Flutter2.0 提供了 FlutterEngineGroup , FlutterEngineGroup 创建一个新 Engine ,内存只增加 180k ,这个给我们提供了很多想象空间。
但 FlutterEngineGroup 最大的问题是多 Engine 之间不是 isolate 层面的内存共享。
从目前看 FlutterBoost 这种单 Engine 内存共享的方式还不能被完全取代。
▐ FlutterBoost 的升级
虽然开源社区很活跃, star 很多,使用者也很多,但 FlutterBoost 离优秀的开源项目还很远。
Flutter Boost 的问题
存在的问题
稳定性每次 Flutter 发布一个 stable 版本,开发者会来问我, FlutterBoost 针对新版本适配了没有?他们准备升级新版本,需要 FlutterBoost 能适配最新版本。而我每次都要针对新版本拉2个新分支( androidx 和 Support 分支),进行适配。时间长了,会产生很多分支,这个给分支管理带来很大的成本,比如在某个分支上修复的 issue 要同步到其他分支,一不小心就会遗漏同步。
社区的 issue 没有收敛的趋势。
设计过于复杂,概念太多。这让一个新手看 FlutterBoost 的代码很吃力。
这些问题促使我们重新梳理设计,为了彻底解决这些顽固的问题,我们做一次大升级,我们把这次升级命名为 FlutterBoost 3.0(上一次升级是2.0)
Flutter Boost 3.0做了什么
针对上述问题,我们做了几个事项:
不侵入引擎,兼容 Flutter 的各种版本,Flutter sdk 的升级不需要再升级 FlutterBoost ,极大降低升级成本。
不区分 Androidx 和 Support 分支。
简化架构和接口,和 FlutterBoost2.0 比,代码减少了一半。
双端统一,包括接口和设计上的统一。
支持打开 Flutter 页面,不再打开容器场景。
页面生命周期变化通知更方便业务使用。
解决了2.0中的遗留问题,例如, Fragment 接入困难、页面关闭后不能传递数据、 dispose 不执行,内存占用过高等。
Flutter Boost3.0 接入和使用
接入方式
flutter_boost:
git:
url: 'https://github.com/alibaba/flutter_boost.git'
ref: 'v3.0-beta.3'
目前 FlutterBoost3.0 发布了 beta 版本,处于公测阶段。
接入档口
详细请看 https://github.com/alibaba/flutter_boost
对 Flutter2.0 新特性 Flutter EngineGroup
FlutterBoost 是采用单 Engine 的方案,所以整个 App 是在同一个 Isolate 下,内存共享。
而 FlutterEngineGroup 是采用多 Engine 方案,每个页面是一个 Engine ,或者一个页面内包含多个 Engine ,每个Engine对应一个 Isolate ,内存不共享。
从 FlutterEngineGroup 生成的 FlutterEngine ,内存只增加 180k 。
因为它对常用资源进行共享(例如 GPU 上下文、字体度量和隔离线程的快照),加快首次渲染的速度、降低延迟并降低内存占用。
那是不是有了 FlutterEngineGroup 就不需要 FlutterBoost 了?
从目前看 FlutterBoost 这种单 Engine 的方案,有一定的合理性,还不能完全被替代。
Flutter Boost 的未来发展
后续会继续做这3件事情:
FlutterBoost3.0 会继续在单 Engine 方向完善和优化,让他更稳定,支持更多场景。
持续和 Flutter 官方沟通,包括能否支持 FlutterEngineGroup 在 isolate 层面的内存共享。
探索 Flutter2.0 多 engine 方案下新的混合栈。
引用
[1]
Multiple Flutters: https://docs.google.com/document/d/1fdKRufqUzQvERcqNIUSq-GdabXc4k8VIsClzRElJ6KY/edit
✿ 拓展阅读
作者|石磬
编辑|橙子君
出品|阿里巴巴新零售淘系技术
以上是关于Flutter Boost 3.0初探的主要内容,如果未能解决你的问题,请参考以下文章
如何为 RVDS 3.0 的 Code Warrior IDE (v5.7) 构建 Boost 库?
FlutterBoost 3.0出现 Activity无法转换为ExclusiveAppComponent<Activity>的解决办法