Flutter Framework使用Dart语言开发,所以App进程中需要一个Dart运行环境(VM),和Android Art一样,Flutter也对Dart源码做了AOT编译,直接将Dart源码编译成了本地字节码,没有了解释执行的过程,提升执行性能。和Java显著不同的是Dart的"线程"(Isolate)是不共享内存的,各自的堆(Heap)和栈(Stack)都是隔离的,并且是各自独立GC的,彼此之间通过消息通道来通信。Dart天然不存在数据竞争和变量状态同步的问题,整个Flutter Framework Widget的渲染过程都运行在一个isolate中。
用问答形式来快速理解下:
我能使用Flutter开发什么样的APP?
Flutter为运行在Android和iOS的2D APP而优化。Flutter开发的APP既适用于简单场景,比如传递品牌价值,也适用于复杂场景,比如股票交易平台。你可以用Flutter开发出各种有特点的APP,比如相机,地理定位,网络,存储和第三方SDK等待。
Flutter的特别之处在哪里?
Flutter既不使用WebView,也不使用系统的原生控件,而是通过高性能的渲染引擎来画控件。除此之外,Flutter不同是因为它只有C/C++代码编写的单一层,这样开发者更容易控制系统,或者说更容易读取或者修改系统的组件,手势,动画框架和控件等等。
我应该用Flutter开发我的下一个APP产品吗?
Flutter正在开发中并尚未达1.0版,不过API很稳定,你需要的特点基本上已经都提供了,所以最终取决于你自己。
Flutter SDK包括哪些东西?
*深度优化,手机优先的2D渲染引擎以及对文本的极佳支持。
*Rx(响应式编程)框架
*针对Android和iOS丰富的控件集合
*提供单元和集成测试API
*提供连接系统和第三方SDK的API
*使用命令行来create, build,test 和 compile APP
Flutter工作是否需要编辑器或者IDE?
在IntelliJ IDEA(同时支持Ultimate和Community版本)里面安装Flutter插件即可工作。或者你可以结合flutter命令行和支持编辑Dart的编辑器。
Flutter是否包含框架?
是的,有响应式编程框架,灵感来源于React框架。不过该框架是可选的,开发者可以选择使用该框架的一部分或者换一个其他框架。
Flutter用什么技术构建的?
C, C++, Dart, and Skia (2D 渲染引擎)
Flutter如何将代码运行在Android上?
引擎的C/C++代码使用Android的NDK编译的,并且框架的大部分和APP代码作为本地代码(由Dart编译器编译的)运行的。
Flutter如何将代码运行在iOS上?
引擎的C/C++代码使用LLVM编译,并且任何Dart代码都是AOT编译成本地代码。
Flutter使用了我的系统的原生(OEM)控件吗?
没有,Flutter提供了一系列的MD风格和Cuperitno(iOS风格)风格的控件,假如我们复用OEM控件,那么FLutter APP的性能会被这些控件质量所限制。
开发FLutter使用什么语言?
使用Dart语言,其底层图表框架和Dart虚拟机用C/C++实现。
为什么FLutter选择使用Dart?
选择一门编程语言遵循如下标准:
*提高开发效率:一套代码运行在iOS和Android,极大地加速开发。
*面向对象:FLutter需要创建可视的用户体验,所以被选择的语言应该是面向对象编程,并且在构建UI框架上经验丰富。如果选择非面向对象语言就是重复造轮子。
*可以预见的,高性能的:FLutter旨在让开发者开发更迅速,让用户体验更流畅。为了实现该目标,需要每个动画帧能够运行大量的代码,也意味着被选择的语言能同时传递高性能和传递可预见的性能,而不是由于周期性停顿而引起丢帧。
*快速分配内存:FLutter框架使用了Rx响应式编程,它依赖于底层内存分配器(处理小而短的内存分配),所以被选择的语言需要有该特性。
Dart语言满足这四个条件,除此之外,我们还有机会与Dart社区一起近距离工作(不断完善Dart以便在Flutter中更好的使用)。
Flutter引擎有多大?
2017年5月,我们测量了Flutter APP的最小尺寸(没有MD风格,仅仅是Center控件),release版apk接近6.7M。在这个最小apk中,核心引擎大约3.3M,框架和APP代码约1.25M,LICENSE文件(在app.flx中)约55k,必须的Java代码(classes.dex)是40k,还有2.1M的ICU数据。你也可以自己测量你的APP大小,执行flutter build apk 并查看 app/outputs/apk/app-release.apk。
Flutter APP性能究竟如何?
性能很优秀,Flutter是为60fps而设计的,Flutter运行的是编译后的代码,而不是解释性程序,这意味着Flutter能快速启动。
从IDE下载程序到手机需要多长时间?
Flutter有热加载(hot reload)功能,亚秒级加载时间。热加载功能是状态保持的(stateful),也就是说热加载后APP状态是保留的,这意味着你可以快速重复屏幕内容而不需要从主屏幕开始加载。
热加载与完全重启哪里不同?
热加载是注入源代码到运行中的Dart虚拟机,包括增加新的类,和给已有类增加新的方法和变量以及修改已有方法。下面几种情况热加载无效:
*全局变量初始化
*静态变量初始化
*修改main()方法
Flutter APP支持的设备和操作系统版本?
支持的手机操作系统:Android Jelly Bean, v16, 4.1.x or newer, and iOS 8 or newer
手机硬件:64-bit iOS 手机(从iPhone 5S开始), and ARM Android 手机。
支持Android 和iOS物理设备,支持Android和iOS模拟器,不支持平板。
能在已经存在的原生APP中使用Flutter吗?
可以,你可以嵌入Flutter视图到你已经存在的Android和iOSAPP中,相关文档正在开发中。
能访问跨平台的服务和API吗,比如传感器和本地存储?
可以,Flutter支持开发者开箱即用来访问一些平台特性的服务和API。然而,为了避免大多数跨平台API出现的”最小公分母”问题,我们不打算支持所有的跨平台服务和API。最后,鼓励开发者使用Flutter的异步消息来创建平台和第三方API综合体。
控件能够继承和自定义吗?
当然可以,Flutter的控件系统被设计为很容易自定义。Flutter并没有为每一个控件提供很多参数,而是提供创作。比如说,RaisedButton 控件并不是普通button控件的子类,而是Material 控件和GestureDetector控件的组合,前者提供视觉设计,后者提供交互设计。如果你想创建一个自定义视觉设计的button控件,可以与实现了你的视觉设计的GestureDetector控件相结合,比如说CupertinoButton控件。视觉设计与交互设计的结合创作赋予开发者最大的控制权,并且还能复用大量代码。我们已经将复杂的控件分解为多个独立的控件(分别实现视觉,交互和手势),你可以任意组合。
能与手机平台默认编程语言交互吗?
可以,能与开发Android的Java代码和开发iOS的 Objective-C或Swift交互,Flutter APP与手机平台通过BasicMessageChannel传递消息。
Flutter开发中并行和并发问题?
Flutter支持虚拟机的堆隔离,所以支持并行,隔离后通过异步消息通信。暂不支持共享内存并发解决方案。
据国外媒体报道,两年多来,谷歌一个秘而不宣的工程师团队一直致力于Fuchsia项目,他们希望Fuchsia最终将取代占据全球主导地位的移动操作系统Android。传言Flutter也将是fuchsia系统的主要框架,时代在进步啊。
当然若考虑弃用Android和Chrome,谷歌可能面临其他风险。大量独立开发者以及三星、华为和LG等设备制造商都依赖着Android操作系统。Chrome也是许多学校和机构的笔记本电脑所采用的重要操作系统。谷歌不能简单地停止支持Android和Chrome操作系统、指望这个庞大的生态系统能够迅速替换成Fuchsia生态。
另一个风险则来自Fuchsia的技术架构。Android和Chrome操作系统都是基于Linux而构建的。“Linux内核”是Google当前这些操作系统的核心,负责处理智能手机和其他设备的硬件和软件之间的指令。 Fuchsia使用了一种名为Zircon的不同内核,它弃用了Linux中的许多旧技术。这可能使一些现有设备不兼容。
不过,弃用Linux也可能有益于谷歌。这就得谈到谷歌和甲骨文之间冗长而又繁杂的诉讼战了:Android的构建使用了甲骨文拥有的Java技术,而甲骨文指控谷歌窃取这些技术用于推动其移动业务。弃用Linux将在这场诉讼中有利于谷歌。
Fuchsia项目带来的另一个有利之处是,为谷歌的资深开源黑客带来技术挑战。谷歌常常安排一些老员工参与这类需耗费大量时间的复杂项目中,以降低他们跳槽的风险。有人这么描述Fuchsia项目,“这个项目旨在留住高级工程师。”
据最新消息,谷歌向媒体CNET透露,Fuchsia何时能应用于设备中尚不明确,不存在什么“五年计划”。在一份声明中,谷歌把这个操作系统描述为“谷歌正展开的众多实验性开源项目之一”,目前不存在把它用在未来产品的时间表。不过我觉得这也是一个趋势,已谷歌的力量,未来也不是说不能完全洗过来的。