热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter核心技术与混合开发模式深入解析

本文深入探讨了Flutter的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。

Flutter 混合开发模式主要分为两种:统一管理模式和三端分离模式。统一管理模式指的是在一个标准的 Flutter Application 工程中,Flutter 的产物工程目录(如 ios/android/)可以直接进行原生混编。这种方式适合 Flutter 业务为主导、原生功能为辅的项目,但随着原生业务的增长,耦合度会增加,维护难度加大。

相比之下,三端分离模式通过 Flutter Module 将 Flutter 以模块化的方式引入原生工程中,生成 iOS 下的 Framework 或 Pods、Android 下的 AAR,从而实现真正的三端分离。这种方式更适合大型项目,能够有效降低耦合度,提高开发效率。

混合栈原理

混合栈主要涉及四种场景的处理:Native 跳转 Flutter、Flutter 跳转 Flutter、Flutter 跳转 Native 和 Native 跳转 Native。每种场景都有不同的实现方式和挑战。例如,Native 跳转 Flutter 相对简单,可以通过 FlutterViewController 或 FlutterView 实现;而 Flutter 跳转 Native 则需要通过 MethodChannel 进行 Dart 与原生平台的通信。

混合模式框架

为了解决混合栈问题,业内提出了一些混合栈框架,主要包括:

  • Flutter Boost:采用类似 WebView 的导航栈,每次打开 Flutter 页面都会创建一个新的 FlutterViewController,逻辑简单但内存开销较大。
  • Flutter Thrio:优化了 Flutter 跳转 Flutter 的场景,使用 Flutter Navigator 导航栈,减少了内存开销,但实现更为复杂。
  • 多 Engine 模式:每个 Engine 内有若干个 FlutterVC,Engine 之间隔离,但资源消耗大,通信复杂。
  • View 级别的混合模式:通过为每个 window 加入 windowId,实现多个 FlutterVC 共享同一个 isolate,减少内存开销,但需要修改 Engine 代码,维护成本高。

多 Engine 模式的细节

多 Engine 模式中,每个 Engine 对应一个 isolate 对象,Engine 之间相互隔离,没有共享内存的并发,不存在死锁问题。然而,启动多个 Engine 会导致资源消耗过多,维护两套缓存池也会增加资源开销。

View 级别的混合模式

基于 View 级别的混合模式通过为每个 window 加入 windowId,实现多个 FlutterVC 共享同一个 isolate,从而减少内存开销。虽然这种方式可以实现更高效的混合开发,但需要对 Engine 代码进行修改,维护成本较高。

编译模式

Dart 支持 JIT 和 AOT 两种编译模式。JIT 模式适用于开发和调试阶段,AOT 模式则用于生产环境,可以提高应用的启动速度和运行性能。在混合开发中,选择合适的编译模式对提升应用性能至关重要。


推荐阅读
  • 管理UINavigationController中的手势返回 - Managing Swipe Back Gestures in UINavigationController
    本文介绍了如何在一个简单的闪存卡片应用中实现平滑的手势返回功能,以增强用户体验。 ... [详细]
  • PBO(PixelBufferObject),将像素数据存储在显存中。优点:1、快速的像素数据传递,它采用了一种叫DMA(DirectM ... [详细]
  • 【高效构建全面的iOS直播应用】(美颜功能深度解析)
    本文深入探讨了如何高效构建全面的iOS直播应用,特别聚焦于美颜功能的技术实现。通过详细解析美颜算法和优化策略,帮助开发者快速掌握关键技术和实现方法,提升用户体验。适合对直播应用开发感兴趣的开发者阅读。 ... [详细]
  • ReactiveCocoa(RAC)是一个支持FRP(函数响应式编程)的框架;详细的就不再多介绍了,直接说说在我们开发中一些RAC的常见用 ... [详细]
  • Hihaveannewbieissuewithobjective-c,cocoa&iPhone.IvedeclaredmapViewinmyapplicatio ... [详细]
  • 本文探讨了在UIScrollView上嵌入Webview时遇到的一个常见问题:点击图片放大并返回后,Webview无法立即滑动。我们将分析问题原因,并提供有效的解决方案。 ... [详细]
  • oracle 对硬件环境要求,Oracle 10G数据库软硬件环境的要求 ... [详细]
  • 本文介绍了在 iOS 开发中设置图片和视图圆角的几种方法,包括通过 layer 设置圆角、使用贝塞尔曲线和 Core Graphics 框架,以及使用 CAShapeLayer 和 UIBezierPath。每种方法都有其优缺点,适用于不同的场景。 ... [详细]
  • PHP-Casbin v3.20.0 已经发布,这是一个使用 PHP 语言开发的轻量级开源访问控制框架,支持多种访问控制模型,包括 ACL、RBAC 和 ABAC。新版本在性能上有了显著的提升。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • iOS开发 - 解决导航栏子视图损坏问题
    本文介绍了一个在Xcode 5.0.2和iOS 7模拟器环境下,使用Storyboard创建CoreData CRUD应用时遇到的导航栏子视图损坏问题及其解决方案。 ... [详细]
  • ECharts 官方提供了丰富的图表示例,但实际项目中往往需要从后端动态获取数据。本文将详细介绍如何从后端获取数据并将其转换为 ECharts 所需的 JSON 格式,以实现动态饼图的展示。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
author-avatar
钟寓宛筠
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有