传统的原生开发需要维护至少两个平台的代码(Android, IOS),这样对版本迭代及人力成本等有更多的要求。而使用Flutter跨平台开发可以实现一套代码多个平台使用,提升了代码复用,降低了人力成本。
跨平台开发历经几个阶段:
第一阶段:原生开发,维护成本高。
第二阶段:H5跨平台交互,Android提供了WebView,担任JavaScript与原生API之间通信的Bridge桥梁,用于在JavaScript与原生之间通信的工具称之为WebViewJavaScriptBridge(JsBridge)。WebView使用浏览器内核加载渲染页面,有较严重的性能问题和内存泄漏问题。
第三阶段:Reactive Native通过桥梁完成原生绘制,以达到更优的性能。RN使用JavaScript完成类似Android中xml等的配置文件的工作,然后通过bridge传递到原生,通知原生完成控件的解析并完成绘制渲染等,其性能优于WebView,但是bridge成本高、压力大,因为需要频繁的跨桥调用,这样会导致卡顿等性能问题。
Flutter正是这样一种跨平台的移动UI框架,它不需要桥梁,并能够与现有代码一起工作,而且可以支持混合开发。Flutter是完全免费且开源的,Flutter支持的平台有Android,IOS,Fuchsia(Fuchsia为Google公司开发的另一个操作系统)。
Flutter架构是两层结构:Framework层和Engine层,Framework层使用Dart语言编写,提供各种基础组件库;Engine层使用C++实现,包括Skia渲染引擎,DartVM等。Flutter能够实现快速开发,界面效果十分丰富,并且性能更好。Flutter支持instant-run热更新。
Flutter使用Dart语言进行开发,它是单线程模型,也就不需要锁,不存在数据竞争和变量状态的同步问题,也没有线程上下文切换带来的性能损耗和加锁导致的卡顿等。垃圾回收采用了多生代垃圾回收算法(DartVM参考了JVM的实现),专门为UI框架中常见的大量Widgets对象创建和销毁进行优化。
Flutter基于JIT的快速开发周期,Flutter在开发阶段采用JIT模式,这样避免了每次改动都要编译,节省了开发时间;
基于AOT的发布包,Flutter在发布时可以通过AOT生成高效的ARM代码以保证性能。
Flutter在Debug时使用JIT编译,支持热重载,可以提升开发效率;Release时使用AOT直接编译成机器码,能够达到更好的性能。
Flutter开发环境配置参考Flutter开发中文网如下链接:
https://flutterchina.club/get-started/install/
按照如上链接中的说明下载Flutter SDK,配置系统环境变量,并在AndroidStudio安装和配置Flutter插件,操作过程比较简单。
待上述配置完成之后,就可以使用AndroidStudio创建第一个Flutter项目了。