Flutter简介

这是Flutter项目主页上对Flutter的定义,它能够轻松、快速地构建漂亮的移动应用。浏览器

Flutter是Google使用Dart语言开发的移动应用开发框架,使用一套Dart代码就能构建高性能、高保真的iOS和Android应用程序,而且在排版、图标、滚动、点击等方面实现零差别。
框架

像大部分的应用开发框架同样,在新建一个Flutter项目时,会有一个默认的main.dart文件,此时将项目编译运行在iOS与Android真机设备中,效果就像上面的图片所展现的那样。
实现跨平台
Flutter不是黑科技,应用程序的代码老是以一种很是合理,能够解释的方式的运行着,只是须要去了解而已。Flutter可以在iOS和Android上运行起来,依靠的是一个叫Flutter Engine的虚拟机,Flutter Engine是Flutter应用程序的运行环境,开发人员能够经过Flutter框架和API在内部进行交互。性能

Flutter Engine使用C/C++编写,具备低延迟输入和高帧速率的特色。关注AR/VR的人应该都知道,AR/VR对延迟和帧速率的要求比传统游戏要高得多,由于它们要求在用户在移动时保持真实世界的稳定性。所以笔者认为Flutter在将来的应用与发展中会占有一席之地。动画

接下来以Android平台为例,简单的介绍一下Flutter的原理,有Android开发经验的人都知道,Android应用程序是运行在Dalvik虚拟机里面的,而且每个应用程序对应有一个单独的Dalvik虚拟机实例,可是Flutter应用程序不使用Dalvik虚拟机。
操作系统

以一个Flutter项目为例,当项目编译成Android后,生成的安装包大约23M。常规的Android应用程序安装包大多都能控制在10M之内,为何Flutter项目编译的Android安装包要23M呢?经过使用Android Studio打开该安装包查看,上面的图片是Android Studio显示的结果。设计

经过观察安装包的内容,能够发现lib目录的大小约为48M,因此安装包庞大的主因就在lib目录。lib目录下包含x86_6四、x86和armeabi-v7a三种CPU类型的指令集,因而可知,Flutter编译的Android应用程序自带独立的虚拟机,也就是上面提到的Flutter Engine。
移动应用开发

Flutter编译的iOS应用程序采起的方案是,使用iOS运行时(Runtime)实现跨平台,iOS运行时(Runtime)是一个用汇编写的一段程序,能够执行C/C++编译的二进制。iOS原生开发的Objective-C语言也是经过iOS运行时(Runtime)执行C/C++的二进制文件,因此Flutter编译的iOS应用能和原生应用不相上下。
blog

2017年的Google发布会上,Google简单介绍了正在研发中的操做系统Fuchsia,另有消息称,该系统的UI用户界面层使用的是Dart语言开发的Flutter框架,笔者相信该消息是真实的,由于在开发Flutter项目的过程当中,使用获取当前平台类型方法时,可选项目中除了iOS和Android,还包含Fuchsia,以下图所示。
游戏

所以,笔者大胆推测Flutter框架实现跨平台的原理,在Fuchsia系统中已经包含Flutter Engine虚拟机,能够直接能够运行Flutter应用程序,Android和iOS系统则是在程序包中内置Flutter Engine虚拟机以运行Flutter应用程序。图片

框架结构
下面的图片是Flutter框架结构图,对大部分开发者而言,最经常使用的是Widgets层,屏幕上可见与不可见的元素都由Widgets层实现,这些元素被称为Widget。在Widgets层在上层,有两个现成的Widget库,Material库即Material Design的Widget库,Material Design是Google I/O 2014发布的设计语言,目前成为统一Android Mobile、Android Table、Desktop Chrome等平台的设计语言规范。Cupertino库则是一个模仿iOS设计风格的Widget库。

Flutter框架结构图的底层是Flutter Engine虚拟机,在这一层次中须要了解一下的是Skia,Skia是Google研发的包括图形、文本、图像、动画等多方面的图形引擎,不只用于Google Chrome浏览器,Android系统也采用Skia做为绘图处理引擎。

上面的图片展现了Flutter的绘图原理,Flutter框架直接使用Skia引擎来渲染,所以可以控制渲染帧数,从而实现高帧速率。

相关文章
相关标签/搜索