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

架构

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


State生命周期

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





注:参考Flutter官方文档

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值