当前位置:首页 > 科技  > 软件

掘力计划第 20 期:Flutter 混合开发的混乱之治

来源: 责编: 时间:2023-08-05 11:44:35 3443观看
导读在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎实现了跨平台高性能渲染,但其独立的渲染层带

在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。HBx28资讯网——每日最新资讯28at.com

HBx28资讯网——每日最新资讯28at.com

Flutter 基于自研的 Skia 引擎实现了跨平台高性能渲染,但其独立的渲染层带来了与 Android 混合开发的技术挑战。经过几年的演进,Android 目前提供了多种混合渲染方案,但都无法完美解决问题,且共存于 Flutter API 中,增加了复杂性。本文将深入解析 Flutter Android 混合开发面临的困境,以及开发者应对策略。HBx28资讯网——每日最新资讯28at.com

Flutter 独立的渲染机制HBx28资讯网——每日最新资讯28at.com

HBx28资讯网——每日最新资讯28at.com

Flutter 能够跨平台高性能渲染的关键在于其自研的 Skia 图形渲染引擎。Skia 通过自身的 renderers、GPU 线程等直接与 GPU 层进行交互,实现绘图功能。这使得 Flutter 的渲染层可以独立于 Android 的原生 UI 线程之外。HBx28资讯网——每日最新资讯28at.com

这种独立的渲染机制给 Flutter 带来很大优势,不依赖原生视图层即可实现高效的跨平台渲染。但是同时也导致了 Flutter 要与原生视图进行混合开发时的困难。HBx28资讯网——每日最新资讯28at.com

如果用一个简单的类比,Flutter 更像是一个游戏引擎。想要往 Unity 这类游戏引擎中插入原生 Android 视图,就像往 HTML 中直接嵌入一个 Canvas 元素一样困难。这需要游戏引擎提供针对性的接口与机制,将不同的 UI 系统进行「适配」。HBx28资讯网——每日最新资讯28at.com

HBx28资讯网——每日最新资讯28at.com

针对这个问题,Android 和 Flutter 社区也经历了多年的探索,提供了一系列的混合渲染方案。HBx28资讯网——每日最新资讯28at.com

Android 混合渲染方案演进HBx28资讯网——每日最新资讯28at.com

Android 在支持 Flutter 混合开发时,经历了多种技术方案的演进过程。现阶段主要存在以下三种混合渲染技术:HBx28资讯网——每日最新资讯28at.com

VD 模式HBx28资讯网——每日最新资讯28at.com

HBx28资讯网——每日最新资讯28at.com

VD 全称 Virtual Display,表示利用虚拟显示的方式进行混合渲染。其关键是采用 VirtualDisplay 将原生视图渲染到一个内存缓冲区中,得到相应的渲染纹理。HBx28资讯网——每日最新资讯28at.com

Flutter 通过特定的 API 调用,可以获取这个渲染纹理,并集成到自身的 Scene 中进行统一渲染。HBx28资讯网——每日最新资讯28at.com

VD 最大的 特点就是渲染的控件其实不是真实存在屏幕位置,而是在内存,所以容易有触摸和键盘问题。HBx28资讯网——每日最新资讯28at.com

HC 模式 HBx28资讯网——每日最新资讯28at.com

HBx28资讯网——每日最新资讯28at.com

HC 全称 Hybrid Composition。它的思路是直接将原生视图通过 Add View 的方式添加到 Flutter 的 View 层次中,进行物理层面的视图混合。HBx28资讯网——每日最新资讯28at.com

HBx28资讯网——每日最新资讯28at.com

这种直接混合模式可以保存原生视图的用户交互,并且可与 Flutter 视图自由叠加。但是由于需要跨线程同步渲染,可能会引入一定的性能开销。HBx28资讯网——每日最新资讯28at.com

TLHC 模式HBx28资讯网——每日最新资讯28at.com

HBx28资讯网——每日最新资讯28at.com

TLHC 即 Texture Layer Hybrid Composition。这是 Android 团队後期提出的方案,试图结合 VD 和 HC 两种模式的优点。HBx28资讯网——每日最新资讯28at.com

TLHC 会通过 hook 原生视图的 onDraw 方法,将其渲染输出重定向到内存中,再提供给 Flutter 作为纹理。这样既避免了线程同步,也可以像 HC 那样自由布局。HBx28资讯网——每日最新资讯28at.com

但是 TLHC 不支持 SurfaceView 等基于独立 Surface 的视图类型。对于一些依赖 SurfaceView 的逻辑,如地图或视频播放,TLHC 存在兼容性问题。HBx28资讯网——每日最新资讯28at.com

共存的模式带来的困境HBx28资讯网——每日最新资讯28at.com

经过几年的演进,Flutter 现在已经可以通过上述三种模式支持 Android 混合开发了。但它们都存在自身的优劣势,无法解决所有的问题场景。HBx28资讯网——每日最新资讯28at.com

HBx28资讯网——每日最新资讯28at.com

更重要的是,这三种模式现在同时存在于 Flutter 的 API 中,可以被开发者同时使用:HBx28资讯网——每日最新资讯28at.com

Plain Text
// VD模式
initAndroidVew()

// HC模式
initSurfaceAndroidView()

// TLHC模式
initAndroidView() HBx28资讯网——每日最新资讯28at.com

这其实带来了很大的复杂性。首先,开发者需要自行理解不同模式的适用场景,进行正确的调用。HBx28资讯网——每日最新资讯28at.com

其次,随着 Flutter 版本的演进,默认的模式也在变化。例如在早期只有 VD,到 1.2 提供 HC,3.0 又引入 TLHC。这意味着在版本升级后,你的混合视图可能会在不知情的情况下发生渲染模式变化,导致问题。HBx28资讯网——每日最新资讯28at.com

再者,TLHC 存在对 SurfaceView 的兼容性问题。就算默认使用 TLHC,后续引入 SurfaceView 也可能触发问题。HBx28资讯网——每日最新资讯28at.com

HBx28资讯网——每日最新资讯28at.com

除此之外,不同模式的性能开销也存在差异。HC 和 TLHC 的额外渲染消耗需要评估。模式切换也可能影响渲染性能。HBx28资讯网——每日最新资讯28at.com

综上所述,困扰 Flutter Android 混合开发的主要问题在于:HBx28资讯网——每日最新资讯28at.com

  1. 存在多种共存的渲染模式,各有特性,选择复杂
  2. 模式之间兼容性存在,可能引入难以察觉的问题
  3. 性能开销和稳定性难以保证

这已经成为困扰 Flutter 混合渲染的主要困境。HBx28资讯网——每日最新资讯28at.com

开发者应对策略HBx28资讯网——每日最新资讯28at.com

面对复杂的混合渲染困境,Flutter 开发者也形成了一些应对策略:HBx28资讯网——每日最新资讯28at.com

  1. 优先使用 TLHC 模式,能覆盖更多场景
  2. 调用时详细指定模式,不要依赖默认值
  3. 注意版本变更带来的潜在问题
  4. 留意是否引入了 SurfaceView 等不兼容场景
  5. 评估不同模式的性能开销区别
  6. 通过自身封装控制模式变更范围
  7. 提前测试不同模式的兼容性

当然,这需要开发者对不同混合渲染模式有足够的理解,才能做出正确的技术选型。实际使用中也需要关注模式带来的兼容性风险,建立健壮的自测方案。HBx28资讯网——每日最新资讯28at.com

未来 Flutter 混合渲染模式是否还会继续增多也需要持续跟进。理想情况下,如果能够演进出一个统一的混合解决方案,将大大简化 Android 平台的混合开发。HBx28资讯网——每日最新资讯28at.com

总结HBx28资讯网——每日最新资讯28at.com

Flutter 基于 Skia 的独立渲染机制,给其在 Android 平台的混合开发带来了挑战。经过几年探索,Android 形成了多种混合渲染方案。但都无法完美解决问题,它们的共存也增加了复杂性。HBx28资讯网——每日最新资讯28at.com

开发者需要深入理解不同模式,并有针对性地进行场景选择和风险评估。未来仍需要社区持续努力,简化这一关键的技术难题,以进一步发挥 Flutter 的跨平台优势。HBx28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-80-0.html掘力计划第 20 期:Flutter 混合开发的混乱之治

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 摸鱼心法第一章——和配置文件说拜拜

下一篇: 2023 年的 Node.js 生态系统

标签:
  • 热门焦点
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    1、前言在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还
  • 每天一道面试题-CPU伪共享

    每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 2023年,我眼中的字节跳动

    2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 认真聊聊东方甄选:如何告别低垂的果实

    认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的“网红”。7月5日至9日,为期5天的东方甄选“甘肃行”首次在自有App内直播,
  • 苹果公司要求三星和LG Display生产「无边框」OLED iPhone显示屏

    苹果公司要求三星和LG Display生产「无边框」OLED iPhone显示屏

    据 The Elec 报道,苹果已要求其供应商为未来的 iPhone 型号开发「无边框」OLED 显示面板。苹果显然已要求三星和 LG Display 开发新的 OLED 显示面
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
Top
Baidu
map