概念

Flutter是一个移动应用程序的软件开发工具包(SDK),具有以下特征:

优势

宏观上:

运行机制

Flutter 应用运行在一个用 C 写的引擎中,Flutter 应用可以看做是一个游戏 App,代码都是在引擎中运行。

引擎的C或C 代码是由Android NDK编译的,而框架的主要代码和应用的代码由Dart compiler编译成native code执行的。

对于Android应用来说,Flutter框架在引擎中实现了一个继承于SurfaceView的 FlutterView。用户所看到的UI都是在这个SurfaceView中显示。如果要和原生平台功能交互,则可以在Activity中使用FlutterView,并通过Flutter提供的消息API和原生平台收发消息。

引擎的C或C 代码是由LLVM编译的,而所有Dart的代码会被AOT编译成native code,整个APP运行时使用的是机器指令(并不是拦截器)。

系统架构

flutter 是否属于混合开发(开发10年老码农经验谈)(1)

flutter 是否属于混合开发(开发10年老码农经验谈)(2)

flutter 是否属于混合开发(开发10年老码农经验谈)(3)

flutter 是否属于混合开发(开发10年老码农经验谈)(4)

flutter 是否属于混合开发(开发10年老码农经验谈)(5)

绘制流程

界面的布局和绘制在每一帧都在发生着,甚至界面没有变化,它也会存在;可以想象每一帧里面,引擎都像流水线的一样重复着几个过程:build(构建控件树),layout(布局), paint(绘制)和 composite(合成),周而复始。驱动整个流水线的入口是WidgetBinding.drawFrame方法。

根据parent给予的约束条件来计算size,而设置size只能在performResize或者performLayout中进行,如果设置sizedByParent为true,则只能在performResize中进行,否则就只能在performLayout中与child的布局同时进行。

flutter 是否属于混合开发(开发10年老码农经验谈)(6)

关于Flutter的大厂精选面试题(部分)
  1. dart是值传递还是引用传递
  2. Jvm虚拟机
  3. messageQueue会不会阻塞ui线程
  4. 对象锁和类锁
  5. 之字形打印树
  6. Widget和element和RenderObject之间的关系
  7. widget的root节点
  8. mixin extends implement之间的关系
  9. jvm内存模型
  10. Future和microtask执行顺序
  11. dart中..的用法
  12. await for

题外话,我在三星小米工作多年,深知技术改革和创新的方向,Android开发以其美观、快速、高效、开放等优势迅速俘获人心,但很多Android兴趣爱好者所需的进阶学习资料确实不太系统,完整。今天我把我搜集和整理的这份学习资料分享给有需要的人,若有关Android学习进阶可以与我在Android终极开发交流群一起讨论交流。由于篇幅问题需要Flutter相关学习进阶资料以及上面Flutter问题答案的可以私信我【Flutter】,我免费分享给大家。领取资料的同时,还可以加入一个好的学习交流圈,何乐而不为呢?加入我们和我们一起吧!!

flutter 是否属于混合开发(开发10年老码农经验谈)(7)

flutter 是否属于混合开发(开发10年老码农经验谈)(8)

flutter 是否属于混合开发(开发10年老码农经验谈)(9)

  • 对标阿里P7 Flutter进阶学习必备知识
  • flutter 是否属于混合开发(开发10年老码农经验谈)(10)

    ,