首页
学习
活动
专区
圈层
工具
发布

Flutter单引擎和外接纹理内存优化探索之路

背景 今年九月初,王者人生Android端及iOS端正式接入flutter跨平台方案来提升开发效率。...接入flutter之后,我们成功使用flutter上线了首页一起玩赢福利,上线之后,我们的优化工作也一直紧锣密鼓的进行着,其中最为突出的三个问题是【flutter热修复,flutter单引擎,flutter...flutter单引擎 着手研究flutter单引擎,是因为对于以原生接入flutter这种形式的项目来说,因为并不是一个纯粹的flutter项目,因此,可能会出现以下这样的导航方式中间过程,而且可能会存在多次...带着这个问题,我研究了一下flutter的启动流程,也记录了一下过程《flutter启动流程简析》,而这个过程让我明白了我们起初的接入方式做不到单引擎,但是如果我们换另外一种方式,可以很巧妙的做到单引擎...所以,我们另外一种接入方式可以做到单引擎吗?

5.8K72
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Flutter 渲染引擎详解 - iOS Metal 篇

    Flutter 渲染引擎在 iOS 上支持三种渲染方式,分别是纯软件(CPU),Metal 和 GL。...这篇文章的主要内容是讲解在 iOS 上,Flutter 渲染引擎: 需要的 Metal GPU 上下文环境是如何完成初始化; 目标输出 Surface 的设置过程; 渲染流水线执行光栅化的调用过程。...上图显示了 Flutter 渲染引擎在 iOS 上主要涉及的对象,绿色背景是 iOS SDK 原生对象,黄色背景是平台相关的适配对象,白色背景是平台无关的通用对象。...break; } FML_CHECK(false); return nullptr; } PlatformViewIOS 一个主要的职责就是创建 IOSContext 对象,由它来为渲染引擎提供...光栅化输出 关于 Flutter 渲染流水线比较完整的说明请参考我之前的文章Flutter 渲染流水线浅析,在这里我们只关注光栅化的部分。

    2.5K31

    flutter |悬浮窗解决方案 flutter_floating

    特性 全局的悬浮窗管理机制 支持各项回调监听,如移动、按下等 支持自定义是否保存悬浮窗的位置信息 支持单页面及全局使用,可插入 N 个悬浮窗 支持自定义禁止滑动区域,例如在 距离顶部 50 到底部的区域内滑动等...isShowLog 属性控制,不同的悬浮窗 Log 会通过不同 key 显示出来 I/flutter (24648): Floating_Log 1 : 按下 X:0.0 Y:150.0 I/flutter...Y:150.0 I/flutter (24648): Floating_Log 1 : 移动 X:0.36363636363636687 Y:149.63636363636363 I/flutter...I/flutter (24648): Floating_Log 1 : 移动 X:0.0 Y:145.9999999999999 I/flutter (24648): Floating_Log 1 :...单悬浮窗创建 单悬浮窗可用于某个页面中,页面退出后关闭即可。 class CustomPage extends StatefulWidget { const CustomPage({Key?

    2.1K30

    Flutter 渲染引擎详解 - iOS GL 篇

    Flutter 渲染引擎在 iOS 上支持三种渲染方式,分别是纯软件(CPU),Metal 和 GL。...这篇文章的主要内容是讲解在 iOS 上,Flutter 渲染引擎: 需要的 GL GPU 上下文环境是如何完成初始化; 目标输出 Surface 的设置过程; 渲染流水线执行光栅化的调用过程。...上图显示了 Flutter 渲染引擎在 iOS 上主要涉及的对象,绿色背景是 iOS SDK 原生对象,黄色背景是平台相关的适配对象,白色背景是平台无关的通用对象。...break; } FML_CHECK(false); return nullptr; } PlatformViewIOS 一个主要的职责就是创建 IOSContext 对象,由它来为渲染引擎提供...光栅化输出 关于 Flutter 渲染流水线比较完整的说明请参考我之前的文章Flutter 渲染流水线浅析,在这里我们只关注光栅化的部分。

    1.7K10

    有赞 Flutter 混编方案

    二、混编方案 2.1 方案考量 如果直接采用 Flutter 工程结构来作为日常开发,那这部分 Native 开发也需要配置Flutter环境, 相当程度的了解 Flutter 一些技术,成本比较大;...时执行此脚本,脚本主要处理: Pod本地依赖Flutter引擎(Flutter.framework) 与Flutter插件注册表(FlutterPluginRegistrant) Flutter插件通过..., flutter, weex 开发),有以下方案(中间产物库每个 Flutter 业务模块都是独立的): Android: ?...六、总结 以上比较全面的描述了有赞的 Flutter 混编方案,目前有赞已经在内部使用的App上使用 Flutter 开发了一些页面作为试点。...相关阅读: 官方 iOS 混编方案:https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps Flutter的编译模式:https

    1.8K41

    Flutter混合栈路由实践与优化

    单引擎下内存进一步优化,解决了打开多个 Flutter 页面时内存异常增长(Boost 等方案下仍有内存异常); 规避底层代码修改不可见导致的项目风险,解决过度耦合 io.flutter 包导致的 sdk...所以多引擎不能满足项目的性能要求。 2. 单引擎浏览器方案 由于多引擎的缺陷,业内的做法一般是对 isolute 或 Engine 进行复用来解决。...影响力较大的是以 FlutterBoost 和 Thrio 为代表的单引擎浏览器方案。...但我们并不清楚外部方案具体做了哪些底层修改,这给项目带来风险。 在预研单引擎路由方案的时候,我们发现大多是直接拉取官方 io.flutter 包来进行底层改造。...三、实现方式及痛点解决 在明确业内方案和面临的痛点之后。我们聚焦于痛点的解决,推出了一套更优的混合栈路由方案 TRouter。 1. 整体框架 整体框架上,仍采用单引擎浏览器方案。

    3.1K51

    Flutter 渲染引擎详解 - RasterCache 与间接光栅化

    在渲染流水线中的光栅化文章中,我介绍了不同渲染引擎使用的不同光栅化的策略。...在 Flutter 的渲染引擎中,使用的是所谓的同步光栅化或者也称为即时光栅化(On Demand),在这种光栅化策略中: 以直接光栅化为主,图层的 DisplayList 直接绘制到目标 Surface...渲染引擎在 RasterCache 中实现了图层的间接光栅化,并且采取了一系列措施来规避和减轻间接光栅化带来的一些副作用,这篇文章的目的就是通过讲解 RasterCache 的实现和 Flutter...渲染引擎对它的使用来帮助读者进一步了解 Flutter 渲染引擎的内部实现细节。...即使规避了不必要的间接光栅化,但是只要使用间接光栅化就需要分配额外的光栅化缓存,所以尽快释放不再需要的缓存可以有效减少 Flutter 渲染引擎的 GPU 内存占用。

    1.5K20

    基于 Flutter 的 Web 渲染引擎「北海」正式开源

    阿里巴巴历时 3 年自研开发的 Web 渲染引擎 北海(英文名:Kraken)正式开源,致力打造易扩展,跨平台,高性能的渲染引擎,并已在优酷、大麦、天猫等业务场景中使用。...过去也有很多对跨平台方案的探索与实践,新的技术方案也随着历史的浪潮不断地发展。...从最早的 H5 方案到 Hybrid 方案,以及后来的 Weex/React Native 方案,到现在如火如荼的 Flutter。 ?...而在 Flutter 出现之前,主流的方案还是用 React Native(Weex)的,这套方案的底层调用了原生的 View。...所以我们积极探索一种向上对接前端生态,向下使用原生渲染的跨平台方案。 于是诞生了这款基于 W3C 标准的高性能跨终端渲染引擎——北海(Kraken)。 ?

    1.6K20

    Flutter 产物分析与减包方案

    因此本文将围绕“产物分析”与“减包方案”两个主题来分别论述 iOS 与 Android 两端的 Flutter 减包原理与方案。 那么,先从 iOS 端开始吧。...汇编产物通过 xcrun 工具得到单架构的 App 产物,最后经过 lipo 得到最后双 ARM 架构的 App 产物。...flutter_assets 是 Flutter Module 中使用到的本地静态资源,对于这部分我们不可能“删”的只能“挪”,我们有两种方案来挪产物——常规方案依然是在 Dart VM 启动时的数据加载阶段来修改...引擎编译 修改完之后我们需要编译引擎,首先先介绍一下 Flutter Engine 编译时需要用到的工具: gclient:源码库管理工具,原本是 chromium 使用的,它可以管理源码以及对应的依赖...2.2 减包方案 libflutter.so 是引擎产物,我们依然可以做裁剪定制,但是必要性已经不大了,因为 Flutter 产物在 Android 端可以做到完全动态下发。

    2.8K40

    Flutter 异常处理方案——灰度与降级

    灰度策略 出于对线上业务的敬畏和某些运营要求,为了保障运营的稳定性,对于线上的 Flutter 业务,我们也需要提供一套较为完备的灰度策略和降级方案。首先,本小节中先谈谈灰度策略。...2.2 后台下发与客户端加载配置 冷热启动都会拉配置,考虑到失败会有3次重试,本地会维护一份单例,在业务侧要打开 Flutter 页面时都需要检查灰度配置,来决定是否打开 Flutter 页面。...对于未来只上 Flutter 的新业务,我们也正在预研 Flutter Web 的同构方案。 3....降级方案 我们需要及时的降级来保证 Flutter 业务的可靠性,灰度和降级其实本质上都是来区分业务是使用 Flutter 还是 H5,只是前者是手动配置的,后者是自动生效的。...3.3 引擎崩溃降级 但如果是引擎发生了错误必定会导致 App Crash,这种情况下不仅需要上报日志,也会置好标志位,在用户下次打开 App 时不再启动 Flutter Engine,并全量降级 Flutter

    3K10

    Flutter 多引擎渲染,在稿定 App 的实践

    对于 Flutter 多引擎的优劣,笔者在这里不多做介绍,只说最重要的一点:如果有 Native + Flutter 同一页面混合布局的需求(UI 一致性 / 降本增效),但又不能整个 App 或者整个页面替换成...多引擎使用 为什么市面多引擎用的人那么少?...multiple-flutters 绝对是 Flutter 的坑中之王 首先,Flutter 版本至少升级到 2.10+,才能有初步的 iOS / Android 多引擎同时布局的可用性。...因为 2.5.3 同时布局多个 FlutterEngine (3 ~ 10 个不等),导致会发生 ANR 的现象,在寻找解决方案无果的情况下,尝试升级到当时最新版本 Flutter 2.10.5 ,结果正常了...Flutter Debug 模式下多引擎 = 内存炸裂,要用 Flutter Release 才可以稳定正常到官方描述的 180K / Engine 的内存占用效果 我们是怎么做的 image.png

    1.3K20

    逆袭Flutter? Facebook 发布全新跨平台引擎 Hermes!

    但是不是为了追赶Flutter?这块作者没有说明。 移动应用变得愈加繁重的同时也愈加复杂了。开发者为应用添加新功能时通常会遇到卡顿等性能问题。...尝试了各种方案后,我们构建了一个新的 JavaScript 引擎:Hermes。...在 Chain React 2019 大会上,我们发布了 Hermes JavaScript 引擎。我们已经开源了 Hermes 引擎及用于 React Native 的 Hermes 集成。...值得注意的是,这几大指标与引擎执行 JavaScript 代码时的 CPU 使用率关系并不大。关注这些指标意味着我们需要发展出与当今大多数 JavaScript 引擎不一样的策略和取舍。...Hermes 对远程调试协议的支持允许开发者连接到在其设备上运行的 Hermes 引擎,并使用与生产中相同的引擎原生调试其应用程序。

    2.3K40
    领券