Flutter学习—简单了解基本原理

简介

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。与React Native不同,Flutter重写了一套跨平台UI框架,开发语言使用Dart,渲染引擎采用谷歌的Skia跨平台图形库实现,在最大程度上保持不同平台的一致性体验,使用Dart语言执行效率也比JS高。

Flutter还提供了Material(Android) & Cupertino(iOS) 两套UI组件以适应不同平台的UI需求。

编译原理

一般编译模式分为AOT(程序运行前编译),JIT(程序运行时编译)。
Flutter
在Debug模式中,使用Kernel Snapshot,对应JIT模式,将dart代码生成标记化的源代码,运行时编译,解释执行,并且支持亚秒级的热重载;

在Release模式中,ios使用AOT编译,编译器将dart代码生成汇编代码,最终生成app.framwork,android使用Core JIT编译,dart转化为二进制模式,在VM启动前载入

热重载原理

断点调试可以发现在/flutter/packages/flutter_tools/lib/src/run_hot.dart中调用restart方法,restart方法中调用_reloadSources方法

Future<OperationResult> _reloadSources({ bool pause = false, String reason, void Function(String message) onSlow }) 

_reloadSources方法中
(1)_updateDevFS()会将扫描工程文件,检查是否有改动,扫描后,生成kernel files,命名为app.dill.incremental.dill文件,通过HTTP端口发送给DartVM
(2)将扫描生成的.dill文件路径,通过RPC远程调用接口调用_reloadSources,触发Flutter Engine中DartVM Reload方法
(3)确认VM资源重载成功,将FlutterDevice UI线程重置,通过RPC接口,触发flutter widgets树重建、重绘

参考:https://www.jianshu.com/p/69c96cefc810?tdsourcetag=s_pctim_aiomsg

扫描二维码关注公众号,回复: 16306057 查看本文章

架构

Flutter架构主要分三层,Framework(框架),Engine(引擎),Embedder(嵌入器)
80301F8E-DE70-4439-A331-B3E377CEE206.png


State生命周期

B01C4818-548F-421D-AD46-BD3A00965B13.png





注:参考Flutter官方文档

猜你喜欢

转载自blog.csdn.net/github_33420275/article/details/88033898