Flutter混合栈管理方案对比

        1.Google官方(多引擎方案)

        Google官方建议的方式是多引擎方案,即每次使用一个新的FlutterEngine来渲染Widget树,存在的主要问题是每个引擎都要有比较大的内存等资源消耗,虽然Flutter 2.0之后的FlutterEngineGroup通过在引擎间共享GPU 上下文、font metrics 和 isolate group snapshot,开销已大大降低,但是仍然没有解决每个FlutterEngine是一个单独isolate,不同FlutterEngine间的通信将会是非常麻烦的问题。

        2.大名鼎鼎的闲鱼flutter_boost(单引擎方案)

        Flutter Boost采用的是直接共享Flutter engine对象,在页面切换时, Flutter View与Flutter Engine进行attach与detach操作。Flutter boost早期版本Dart侧维护了一个Navigator栈的结构,基于栈的操作依赖对Flutter框架的一个属性修改,具有侵入性,并且由于pop出的页面就会销毁,在多个平级逻辑页面切换,无法使其它flutter平级页面状态得到保持。最新版本主要变化是, 不再用栈式结构来管理Flutter页面, 改为在native侧和Flutter侧对所有页面都进行缓存。页面的创建与销毁与对应的native容器的生命周期保持一致。这一改变解决了侵入性问题,并且所有页面的状态都可以保持。

        简言之, Flutter boost最新版本的核心逻辑是,页面导航的核心仍然由native进行驱动,根据native侧的页面生命周期事件,通过channel通知Flutter侧响应页面上屏等逻辑。 对于每个Flutter页面, 在native侧, 则都有一个FlutterViewContainer实例与之对应,  在dart侧则是一个BoostContainer实例,其缓由FlutterContainerManager进行管理,两者通过通信,保持生命周期一致。哪个页面需要显示,在native侧就是将对应的vc push进导航栈,同时将flutter引擎attach到对应的FlutterViewController。

       但Flutter boost方案仍然存在一些问题:

        (1)开源版本不够稳定, 适配Flutter新版本非常慢

        (2)未完全剥离对阿里业务框架的依赖,里面包含很多与导航无关的代码依赖

        3.哈喽单车团队的flutter_thrio(单引擎/多引擎均支持)

        flutter_thiro是哈喽单车团队提供的一个解决方案,其与flutter_boost的主要不同是,flutter_boost的导航切换都是由native侧驱动,每次页面切换native侧都会创建一新的页面放到导航栈中,而flutter_thrio在native之间及native和flutter之间的页面切换同样由native侧驱动,但flutter页面内部的切换由flutter自带的Navigator来管理,native侧导航栈不创建对应的页面容器。这样做的好处是可以节省部分内存,但需要通过一层包装处理隔离这种导航实现方式上的差异,实现上会更复杂一些。

        

       ​​​​ 不过flutter_thrio整体封装相当不错,所有的页面切换逻辑非常统一,均采用基于url进行页面跳转。同时既支持单引擎工作模式,也支持多引擎工作模式,同时不存在对引擎代码的侵入式修改,不过该方案开源代码已经有两年多没有更新,如果遇到问题,可能需要自行维护。

        4.字节跳动团队的Isolate复用方案和腾讯心悦团队的TRouter方案

        这两个方案均未开源介绍来看都存在flutter引擎侵入式修改,比如今日头条的方案就是通过修改 Flutter Engine 源码,使多 FlutterView 实例对应的多 Flutter Engine 能够在底层共享 Isolate。即在上层看来有多个Flutter Engine 实例,但在底层只有一个唯一的Isolate,这样就可以在解决多引擎内存占用大的问题的同时,保持数据仍然可以在引擎间共享。这类侵入性比较强的方案存在的主要问题是,接入方案就需要接入相关的自定义flutter引擎代码,后续在可维护性上以及对flutter版本升级的兼容性上都存在较大不确定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/718125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全: Kali Linux 使用 nmap 扫描目标主机

目录 一、实验 1.环境 2. Kali Linux (2024.1) 使用 namp 扫描目标主机 3.Kali Linux (2024.1)远程登录 Windows Server 4.Kali Linux (2024.1) 使用crunch字典工具 5.Kali Linux (2024.1)使用hydra密码工具 6.Kali Linux (2022.3) 通过SSH端口获取 Ubuntu 密码 二、问题…

C++——模板详解

目录 模板 函数模板 显示实例化 类模板 模板特点 模板 模板,就是把一个本来只能对特定类型实现的代码,变成一个模板类型,这个模板类型能转换为任何内置类型,从而让程序员只需要实现一个模板,就能对不同的数据进行操…

FPGA-串口接收图像写入RAM并读出在TFT显示屏上显示

系统框图: 需要用到的模块有: 1,UART_RX(串口接收模块); 2,串口接受的数据存放到RAM模块; 3,RAM IP核; 4,时钟IP核 (TFT显示屏驱动时钟的产生&#xff09…

kafka同步副本集及关键参数

上篇文章讲了副本机制是什么,一文读懂kafka内部怎么运行的-CSDN博客 这里深挖下同步副本集及里面的关键参数。副本会去leader副本拉去数据追加到自己日志中。 我们知道kafka副本的作用是提高系统的高可用。当leader副本挂了时,会从候选副本集中选者一个当…

java-幂等性

幂等性 1.1幂等性定义: 在计算机领域中,幂等(Idempotence)是指任意一个操作的多次执行总是能获得相同的结果,不会对系统状态产生额外影响。在Java后端开发中,幂等性的实现通常通过确保方法或服务调用的结…

设计模式(十四)中介者模式

请直接看原文: 原文链接:设计模式(十四)中介者模式_设计模式之中介模式-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 前言 写了很多篇设计模式的…

Ribbon实现Cloud负载均衡

安装Zookeeper要先安装JDK环境 解压 tar -zxvf /usr/local/develop/jdk-8u191-linux-x64.tar.gz -C /usr/local/develop 配置JAVA_HOME vim /etc/profile export JAVA_HOME/usr/local/develop/jdk1.8.0_191 export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOM…

Windows Server 各版本搭建文件服务器实现共享文件(03~19)

一、Windows Server 2003 打开服务器,点击左下角开始➡管理工具➡管理您的服务器➡添加或删除角色 点击下一步等待测试 勾选自定义配置,点击下一步 选择文件服务器,点击下一步 勾选设置默认磁盘空间,数据自己更改,最…

【JavaEE】_Spring MVC 项目传参问题

目录 1. 传递单个参数 1.1 关于参数名的问题 2. 传递多个参数 2.1 关于参数顺序的问题 2.2 关于基本类型与包装类的问题 3. 使用对象传参 4. 后端参数重命名问题 4.1 关于RequestPara注解 1. 传递单个参数 现创建Spring MVC项目,.java文件内容如下&#xff…

Apache Flink连载(三十七):Flink基于Kubernetes部署(7)-Kubernetes 集群搭建-3

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录

AI-数学-高中-32-概率-样本空间与随机事件

原作者视频:【概率】【一数辞典】1样本空间与随机事件_哔哩哔哩_bilibili 1.随机试验: 2.样本点、样本空间、有限样本空间: 示例1 示例2 3.事件: 示例:

自己本地模拟内存数据库增删改查

目录 学习初衷准备代码实现结果感谢阅读 学习初衷 用于满足自己的测试要求,不连接数据库,也不在意数据丢失 准备 maven依赖 org.springframework.boot spring-boot-starter-test test 代码实现 内存数据库(InMemoryDatabase&#xff0…

[AutoSar]BSW_Com08 CAN driver 模块介绍及参数配置说明 (二)

目录 关键词平台说明一、CanControllers二、CanTxProcessing三、CanFilterMask四、CanHardwareObjects五、CanGeneral 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector ,芯片厂商TI 英飞凌编程语言C,C编译器…

游戏引擎分层简介

游戏引擎分层架构(自上而下) 工具层(Tool Layer) 在一个现代游戏引擎中,我们最先看到的可能不是复杂的代码,而是各种各样的编辑器,利用这些编辑器,我们可以制作设计关卡、角色、动画…

数据类型和变量

1.数据类型 在Java中数据类型主要分为两类:基本数据类型和引用数据类型。 基本数据类型有四类八种: 1. 四类:整型、浮点型、字符型以及布尔型 2.八种: 整形是分为如上四种 byte short int long 浮点型分为 float 和double …

【大厂AI课学习笔记NO.64】机器学习开发框架

机器学习开发框架本质上是一种编程库或工具,目的是能够让开发人员更容易、更快速地构建机器学习模型。 机器学习开发框架封装了大量的可重用代码,可以直接调用,目的是避免“重复造轮子’大幅降低开发人员的开发难度,提高开发效率…

Spring框架精髓:带你手写IoC

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

足球青训俱乐部|基于Springboot的足球青训俱乐部管理系统设计与实现(源码+数据库+文档)

足球青训俱乐部管理系统目录 目录 基于Springboot的足球青训俱乐部管理系统设计与实现 一、前言 二、系统设计 1、系统架构设计 三、系统功能设计 1、管理员登录界面 2、公告信息管理界面 3、学员管理界面 4、商品信息管理界面 5、课程安排管理界面 四、数据库设计…

ArcGIS Runtime For Android开发之符号化和图层渲染

一、用Symbol对要素进行符号化 首先我们看一下Symbol 接口关系: 1、SimpleFillSymbol 他是用来进行简单的Graphic面要素填充符号化的,它可以设置要素的填充颜色,边线颜色、线宽,其用法如下: Polygon polygonnew Po…

常用的电阻、电容的种类和应用场合?

电阻的 a.按阻值特性:固定电阻、可调电阻、特种电阻(敏感电阻),不能调节的,我们称之为固定电阻,而可以调节的,我们称之为可调电阻.常见的例如收音机音量调节的,主要应用于电压分配的,我们称之为电位器. b.按制造材料:碳膜电阻、金属膜电阻、线绕电阻,捷…