Flutter也比较热,一套代码统一移送端必定是趋势,和React Native基于JS bridge调用Native端,HTML+JS的UI构建逻辑,将复杂耗时的渲染交给系统,解决webview性能问题不同,Flutter直接重写一套跨平台的UI框架,UI控件、渲染逻辑甚至开发语言。渲染引擎依靠跨平台的Skia图形库来实现,很大程度上解决RN带来的不同平台上的差异问题(目前一些大公司有弃用RN,因为RN在Android、iOS有些地方需要更多的兼容,反而带来了更多的开发成本)
Flutter有点React的意思,虚拟DOM树,管理数据流驱动视图。也追风看了Flutter文档,我想目前大部分都是基于Native结合Flutter吧,Flutter可以直接打包AAR然后集成到现有原生App中了。
部门有几个同事,项目的需要去接触RN,去接触后台,去接触不同的领域,经过一两个项目的完结,均能很快上手去处理业务。自己也是需求去接触了Angular,Ionic等,越加觉得语言没想象中的那么重要,最多是比其他人更熟悉API,仅仅而已。仍需要不断的挖掘其原理本质。
下面国内平台对于Flutter的基于业务详细解析:
1、详看闲鱼团队-Flutter上的最后一公里
<1> 正如Flutter 和 React native在怎么花销炫酷、在Native中都是一个View(Android)、ViewController(iOS)。Flutter和Native的混合开发带来在Android端出现的混合栈问题(iOS有对外系统接口可以方便管理),需要统一管理Native,Flutter的跳转交互。最终闲鱼团队的优化方案,每次启动Activity,通过复用一个FlutterView管理。
2、美团这篇还需要消化 Flutter的原理及美团的实践
<1>Dart中类似线程的概念叫做Isolate,每个Isolate之间是无法共享内存的,所以这种分配策略可以让Dart实现无锁的快速分配。多生代无锁垃圾回收器。
<2>Dart的垃圾回收也采用了多生代算法,新生代在回收内存时采用了“半空间”算法,触发垃圾回收时Dart会将当前半空间中的“活跃”对象拷贝到备用空间,然后整体释放当前空间的所有内存。(不知道这个和jvm中新生代的复制清除有何区别?)
<3> Debug模式下Flutter使用JIT方式来执行Dart代码,所有的Dart代码都会打包到APK文件中assets目录下,由libflutter.so中提供的DartVM读取并执行:
Release模式(flutter run --release)下,Flutter会使用Dart的AOT运行模式,编译时将Dart代码转换成ARM指令
<4>运行机制:默认情况下Flutter在Application#onCreate时调用FlutterMain#startInitialization来启动解压任务,然后在FlutterActivityDelegate#onCreate中调用FlutterMain#ensureInitializationComplete来等待解压任务结束