Flutter技术解析与实战——闲鱼技术演进与创新-第1章(10)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 本书将详细讲解闲鱼Flutter&FaaS云端一体化架构,以及闲鱼基于Flutter的架构演进与创新,学习一套全面的Flutter架构应用方案。本书介绍闲鱼技术团队利用Flutter技术改造和上线复杂业务的混合工程改造实践,抽取Flutter依赖到远程的实现细节,以及使用Plugin桥接获取设备信息、使用基础网络库等混合开发实践指南。这些实践遍布闲鱼各大业务线和应用场景,为读者使用Flutter打造自己的研发体系探索一条实践之路。除了介绍闲鱼Flutter应用框架Fish Redux、开发利器AspectD、FlutterBoost等一众开源工具与开发实践指南,你还将在......

1.5.3 第二代混合技术方案 FlutterBoost

1.重构计划

      闲鱼在推进Flutter 化过程当中,遇到了更加复杂的页面场景,也逐渐暴露了老方案的局限性和一些问题。所以,闲鱼启动了代号为FlutterBoost的新混合技术方案。我们的主要目标有:

  • 可复用通用型混合方案。
  • 支持更加复杂的混合模式,例如支持主页Tab。
  • 无侵入性方案,不再依赖修改Flutter 的方案。
  • 支持通用页面生命周期。
  • 统一明确的设计概念。

      跟老方案类似,新的方案仍采用共享引擎的模式实现。主要思路是由Native 容器通过消息驱动Flutter 页面容器,从而达到Native 容器与Flutter容器的同步目的。希望做到Flutter 渲染的内容是由Naitve 容器来驱动的。

      简单地理解,闲鱼想把Flutter 容器做得像浏览器一样。填写一个页面地址,然后由容器管理页面的绘制。在Native 侧,开发者只需要关心如何初始化容器,然后设置容器对应的页面标志即可。

2.主要概念(如图1-21)

31.jpg

图1-21

      (1)Native 层

  • Container:Native 容器、平台Controller、Activity 和ViewController。
  • Container Manager:容器的管理者。
  • Adaptor:Flutter 是适配层。
  • Messaging:基于Channel 的消息通信。

      (2)Dart 层

  • Container:Flutter 用来容纳Widget 的容器,具体实现为Navigator 的派生类。
  • Container Manager:Flutter 容器的管理者,提供show、remove 等API。
  • Coordinator:协调器,接受Messaging 消息,负责调用Container Manager的状态管理。
  • Messaging:基于Channel 的消息通信。

      (3)关于页面的理解

      在Native 和Flutter 中,表示页面的对象和概念是不一致的。在Native中,对于页面的概念一般是ViewController 和Activity。而在Flutter 中,对于页面的概念是Widget。我们希望可统一页面的概念,或者说弱化Flutter本身的Widget 对应的页面概念。换句话说,当一个Native 的页面容器存在的时候,FlutteBoost 保证一定会有一个Widget 作为容器的内容。所以,我们在理解和进行路由操作的时候,都应该以Native 的容器为准,Flutter Widget 依赖于Native 页面容器的状态。

      在FlutterBoost 的概念里说到页面的时候,指的是Native 容器和它所附属的Widget。所有页面的路由操作,打开或者关闭页面,实际上都是对Native 页面容器的直接操作。无论路由请求来自何方,最终都会转发给Native 实现路由操作。这也是接入FlutterBoost 时需要实现Platform 协议的原因。

      另一方面,我们无法控制业务代码通过Flutter 本身的Navigator 去push新的Widget。对于业务不通过FlutterBoost 而直接使用Navigator 操作Widget 的情况,建议由业务自己负责管理其状态。这种类型的Widget 不属于FlutterBoost 所定义的页面概念。

      理解这里的页面概念,对于理解和使用FlutterBoost 至关重要。

3.与老方案的主要差别

      老方案在Dart 层维护单个Navigator 栈结构用于Widget 的切换。而新的方案则是在Dart 侧引入了Container 的概念,不再用栈的结构维护现有的页面,而是通过将Key-Value 映射扁平化的形式去维护当前所有的页面,每个页面拥有一个唯一的ID 地址。这种结构很自然地支持了页面的查找和切换,不再受制于栈顶操作,一些由于Pop 导致的问题迎刃而解。同时,也不再依赖修改Flutter 源码的形式去实现,避免了实现的侵入性。

      这是如何做到的呢?

      Flutter 在底层提供了让开发者自定义Navigator 的接口,闲鱼自己实现了一个管理多个Navigator 的对象。当前最多只会有一个可见的Flutter Navigator,它包含的页面也就是当前可见容器所对应的页面。

      Native 容器与Flutter 容器(Navigator)是一一对应的,生命周期也是同步的。当一个Native 容器被创建的时候,Flutter 的一个容器也被创建,它们通过相同的ID 地址关联起来。当Native 的容器被销毁的时候,Flutter的容器也被销毁。Flutter 容器的状态跟随Native 容器而变化,这也就是Native 驱动。由Manager 统一管理切换当前在屏幕上展示的容器。

      下面用一个简单的例子描述一个新页面创建的过程:

  • 创建Native 容器(iOS ViewController,Android Activity or Fragment)。
  • Native 容器通过消息机制通知Flutter Coordinator 新的容器被创建。
  • Flutter Container Manager 得到通知,负责创建出对应的Flutter 容器,并且在其中装载对应的Widget 页面。
  • 当Native 容器展示到屏幕上时,容器给Flutter Coordinator 发消息,通知要展示页面的ID 地址。
  • Flutter Container Manager 找到对应ID 地址的Flutter Container 并将其设置为前台可见容器。

      这就是一个新页面创建的主要逻辑,销毁和进入后台等操作也类似由Native 容器事件去驱动。

      目前,FlutterBoost 已经在生产环境支撑闲鱼客户端中所有的基于Flutter 开发的业务,为更加负复杂的混合场景提供了支持,同时也解决了一些历史遗留问题。闲鱼在项目启动之初就希望FlutterBoost 能够解决Native App 混合模式接入Flutter 这个通用问题。所以把它做成了一个可复用的Flutter 插件,希望吸引更多感兴趣的朋友参与到Flutter 社区的建设中来。闲鱼的方案可能不是最好的,希望看到社区能够涌现出更加优秀的组件和方案。

1.5.4 扩展补充

1.性能相关

      在对两个Flutter 页面进行切换时,因为只有一个Flutter View,所以需要对上一个页面进行截图保存。如果Flutter 页面较多,则截图会占用大量内存。这里采用文件内存二级缓存策略,在内存中最多只保存2~3 个截图,其余的截图在写入文件时按需加载。这样一来,可以在保证用户体验的同时,使内存也保持在一个较为稳定的水平。

      在页面渲染性能方面,Flutter 的AOT 优势展露无遗。当页面快速切换的时候,Flutter 能够很灵敏地进行相应页面的切换,在逻辑上创造出一种Flutter 有多个页面的感觉。

2.Release 1.0 支持

      在项目开始的时候,闲鱼基于目前使用的Flutter 版本进行开发,而后进行了Release 1.0 兼容升级测试且没有发现问题。

3.接入

      只要是集成了Flutter 的项目,都可以用官方依赖的方式,非常方便地以插件形式引入FlutterBoost,只需要对工程进行少量代码接入即可。详细接入文档,请参阅GitHub 主页官方项目文档。

相关文章
|
8天前
|
存储 缓存 算法
HashMap深度解析:从原理到实战
HashMap,作为Java集合框架中的一个核心组件,以其高效的键值对存储和检索机制,在软件开发中扮演着举足轻重的角色。作为一名资深的AI工程师,深入理解HashMap的原理、历史、业务场景以及实战应用,对于提升数据处理和算法实现的效率至关重要。本文将通过手绘结构图、流程图,结合Java代码示例,全方位解析HashMap,帮助读者从理论到实践全面掌握这一关键技术。
47 13
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术深度解析:从基础到应用的全面介绍
人工智能(AI)技术的迅猛发展,正在深刻改变着我们的生活和工作方式。从自然语言处理(NLP)到机器学习,从神经网络到大型语言模型(LLM),AI技术的每一次进步都带来了前所未有的机遇和挑战。本文将从背景、历史、业务场景、Python代码示例、流程图以及如何上手等多个方面,对AI技术中的关键组件进行深度解析,为读者呈现一个全面而深入的AI技术世界。
65 10
|
4天前
|
物联网 调度 vr&ar
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
鸿蒙技术分享:HarmonyOS Next 深度解析 随着万物互联时代的到来,华为发布的 HarmonyOS Next 在技术架构和生态体验上实现了重大升级。本文从技术架构、生态优势和开发实践三方面深入探讨其特点,并通过跨设备笔记应用实战案例,展示其强大的分布式能力和多设备协作功能。核心亮点包括新一代微内核架构、统一开发语言 ArkTS 和多模态交互支持。开发者可借助 DevEco Studio 4.0 快速上手,体验高效、灵活的开发过程。 239个字符
148 13
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
|
3天前
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
32 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
|
17天前
|
数据采集 DataWorks 搜索推荐
阿里云DataWorks深度评测:实战视角下的全方位解析
在数字化转型的大潮中,高效的数据处理与分析成为企业竞争的关键。本文深入评测阿里云DataWorks,从用户画像分析最佳实践、产品体验、与竞品对比及Data Studio公测体验等多角度,全面解析其功能优势与优化空间,为企业提供宝贵参考。
93 13
|
7天前
|
容器
Flutter Widget 解析
Flutter Widget 解析
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
秒级响应 + 99.9%准确率:法律行业文本比对技术解析
本工具基于先进AI技术,采用自然语言处理和语义匹配算法,支持PDF、Word等格式,实现法律文本的智能化比对。具备高精度语义匹配、多格式兼容、高性能架构及智能化标注与可视化等特点,有效解决文本复杂性和法规更新难题,提升法律行业工作效率。
|
13天前
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。
|
19天前
|
机器学习/深度学习 自然语言处理 监控
智能客服系统集成技术解析和价值点梳理
在 2024 年的智能客服系统领域,合力亿捷等服务商凭借其卓越的技术实力引领潮流,它们均积极应用最新的大模型技术,推动智能客服的进步。
54 7
|
20天前
|
存储 监控 调度
云服务器成本优化深度解析与实战案例
本文深入探讨了云服务器成本优化的策略与实践,涵盖基本原则、具体策略及案例分析。基本原则包括以实际需求为导向、动态调整资源、成本控制为核心。具体策略涉及选择合适计费模式、优化资源配置、存储与网络配置、实施资源监控与审计、应用性能优化、利用优惠政策及考虑多云策略。文章还通过电商、制造企业和初创团队的实际案例,展示了云服务器成本优化的有效性,最后展望了未来的发展趋势,包括智能化优化、多云管理和绿色节能。

推荐镜像

更多