让移动开发更轻松 闲鱼基于Flutter构建跨端APP应用实践

2023-10-13 07:10

本文主要是介绍让移动开发更轻松 闲鱼基于Flutter构建跨端APP应用实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Flutter是一款由Google开发的开源、跨平台的移动端开发框架,使用Flutter开发出的应用符合不同平台的原生体验,可以让应用看起来跟系统更加协调。

如何基于Flutter高效构建跨端APP?本期内容特邀阿里巴巴无线技术专家吉丰就闲鱼开发实践展开分享。

Flutter是什么?

Flutter是一个全新的移动UI框架,它允许使用同一个代码库构建高性能的Android和iOS应用,同时它也是Google即将推出的Fuchsia操作系统的开发平台。通过自定义的Flutter引擎可以将其嵌入到其他平台,旨在帮助开发者使用一套代码开发高性能、高保真的Android和iOS应用。

闲鱼为什么使用Flutter?

原生性能

Flutter会以原生的性能提供给开发者,它的开发性能非常接近传统的Native,包括渲染方式、AOT的编译方式和其他优化。

Flutter开发的页面跟Native没有差距。在安卓中低端机型里,基于Flutter开发出来的APP在帧率上会有更流畅的体现,内存占用也会有更低的消耗。

快速开发

Flutter因其本身的跨端性,大幅提升了传统的安卓开发速度。一般认为,前端开发的速度较快,基于Flutter,开发速度比前端更快。

image

统一的应用开发体验

在跨端层面上,由于Flutter把两端的渲染机制下沉到更低的渲染层,基于统一的C++层的渲染引擎来搭建底层的UI框架,因此,Flutter会让跨端体验得到更一致的效果。

image

Flutter开发优点颇多,是否可在业务场景中快速铺开使用?吉丰表示,实际遇到的问题比想象中要多,他就开发过程中遇到的问题举例:

“比如,内存的问题。随着Flutter页面的堆栈变得越来越深,内存的释放并没有得到及时的释放。比如,字体的问题。不同的字体在不同的机器里渲染的效果非常不一致。再比如,截图会出现黑屏的问题。还有图片缓存的问题。跟安卓端的图片缓存是完全不同的体系。另外,它的暗黑区、适配问题,以及私有库、阿里中间件的适配,以及它不支持反射和序列化,怎么把Native的组件集成到Flutter体系,也是一个比较大的问题……”

image

那么,闲鱼是如何借助Flutter完成开发的呢?

Flutter与Native混合开发实践

闲鱼目前的解决方案是通过ID的形式共享外部缓存纹理。首选把Flutter和闲鱼现有的 APP 做渐进式整合,App中会同时有 Native、Flutter 和 H5 页面。

image

闲鱼的详情页包含混合栈、视频、动画、原生组件、多图、留言盖楼等功能,页面较复杂,是闲鱼最重要的页面之一。选择商品详情页做为第一个Flutter页面,是闲鱼能成功快速使用Flutter的重要因素。

image

image

其次,在Flutter页面嵌入Native组件的过程中需要保持数据的一致性。数据的一致性是指多个页面之间需要对数据依赖有一致性。在页面开发快速迭代过程中,代码的复用度相对较低,后期维护成本高,解决数据一致性是个难题。

对此,闲鱼构建了基于Flutter下的新架构——Redux和Component。

image

image

Redux最主要是用作应用状态的管理,可以解决数据集中的问题,它会完全follow社区的概念。基于Redux,关于社区的概念、定义、签名、实现,会以最标准的形式去follow。

Redux解决了集中问题后,基于Redux下的Component会接着完成诉求,包括分置、更多力度的复用等。对这一概念,就如同有一个page下面有一些component,最后有一些stateless,跟状态无关的表达。在数据层面,它有唯一的store,推送对应的component,这就是 Half-Dumb的模型。

因为传统的组件要做的事情很多,要负责渲染,要负责交互数据的处理,也要负责数据的修改,对于无法修改自己数据的component,称为半哑巴模型,它可以完成百分百由数据驱动视图的架构。

image

最终,这样的架构解决了数据一致性和代码复用的问题,并在复用层面上提供包括Component的组件,加快了代码隔离、代码的可读性和标准规范的落地。

image

总体而言,Flutter编程模型共有三点优势:一是可以得到非常好的性能,二是有非常及时的开发效率,三是能得到非常好的跨端体验。

Flutter可让一张图片自动生成多端的UI代码,UI代码不再需要特别多的人力介入,其他工程师只需关注业务层面的解决和实施推荐系统即可。

对于闲鱼Flutter跨端开发实践,开发者觉得有哪些值得借鉴和可以改进的地方呢?欢迎留言说出您的看法~

这篇关于让移动开发更轻松 闲鱼基于Flutter构建跨端APP应用实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201583

相关文章

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作