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

概念

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

  • 跨平台应用的框架,没有使用WebView或者系统平台自带的控件,使用自身的高性能渲染引擎自绘
  • 简化版的浏览器,最大限度在android和ios上统一UI,包括业务逻辑和用户体验
  • 开发语言使用dart,结合C, C , 和Skia(2D渲染引擎)构建
  • 支持hot reload,包含着完整的控件和工具链
  • 一切皆控件,控件是每个Flutter应用程序的基本构建块,与分离视图、控制器、布局和其他属性的框架不同,Flutter具有一致的统一对象模型:控件。一个控件可以定义:结构元素(比如按钮或菜单)、风格元素(比如字体或颜色方案)、布局的方面(比如填充)、一些业务逻辑等
  • 组合大于继承,控件本身通常由许多小型、单用途的控件组成,结合起来产生强大的效果,类的层次结构是扁平的,以最大化可能的组合数量
  • 强化版的WebView,框架仅提供一个View层,大部分功能要依赖原生
  • 目前只能够运行大部分Dart代码(不能引入dart:mirrors或dart:html库)
优势

宏观上:

  • 对于用户,Flutter能够提供优美的UI和流畅的使用体验
  • 对于开发者,Flutter降低了开发App的门槛,加速移动应用的开发速度,并且能够降低同时开发Android和iOS应用的成本和复杂度
  • 对于设计者,Flutter能够轻松做出原型并且能够保持相当高还原度
  • 微观上:
  • 高效率,用一套代码库就能开发iOS和Android应用
  • 使用新型的、表现力强的语言和声明式的方法,用更少的代码来做更多的事情
  • 可以在应用程序运行时更改代码并重新加载查看效果,也就是热重新加载
  • 修复崩溃时可以从应用程序停止的位置继续调试
  • 创建美观、高度定制的用户体验
  • Flutter框架内置了一组丰富的质感设计控件
  • 实现定制、美观、品牌驱动的设计,而不受OEM控件集的限制
  • 深度优化,移动优先的2D渲染引擎而且对文本支持非常出色
  • react风格的框架
  • 支持单元和集成测试的API
  • 支持与系统平台和第三方SDK交互的插件API
  • 支持Windows,Mac和Linux的Headless test runner
  • 支持创建,构建,测试和编译应用的命令行工具
运行机制

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

  • Android

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

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

  • ios

引擎的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的布局同时进行。

  • Layer层

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)

  • Android高级工程师Flutter系统学习知识体系

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

  • Flutter进阶学习全套手册

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

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

    ,

    免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

      分享
      投诉
      首页