Android开发经验谈Android开发Android技术知识

flutter与fuchsia简介

2019-03-21  本文已影响237人  android老男孩

flutter是什么

最近同事分享了一篇flutter操作系统,感觉不错,自己总结了一下,发上来给大家一个参考,Flutter 是 Google 开发的一套全新的跨平台、开源 UI 框架,支持 iOS、Android 系统开发,它也是构建未来的 Google Fuchsia 系统应用的主要方式。在全世界,Flutter 正在 被越来越多的开发者和组织使用。

Fuchsia是什么

Fuchsia,是由Google公司开发的继Android和Chrome OS之后的第三个系统,已在Github中公开的部分源码可以得知。Google对于Fuchsia的说明是“Pink(粉红)+Purple(紫色)=Fuchsia(灯笼海棠,一个新的操作系统)
官方文档地址 https://github.com/FuchsiaOS/FuchsiaOS-docs-zh_CN

Fuchsia 由 Google 公司开发的继 Android 和 Chrome OS 之后的第三个系统,它不同于安卓使用的 Linux 内核,而是采用的比较新的 Zircon 的内核 。该系统与当下 Android 相比,无论是存储器还是内存之类的硬件要求都大幅降低。Flutter 引擎+Dart 语言将可能会成为 Fuchsia 系统主要的 UI 开发框架。

顺便所以下fuchsia

为什么要发布这个操作系统?

  1. google认为linux不具有稳定的驱动街口,Fuchsia希望提供这样一个稳定的驱动接口,让各个厂商根据这个接口自行开发和维护驱动,也是google对=掌控物联网的一个决心。
  2. 虽然现在android的手机基本不会卡顿,但是现在的android手机对内存要求还是不低,而
    Magenta是微内核,无论是对存储还是内存之类的硬件要求都大幅降低,
  3. 操作系统的扩展,该操作系统可扩展到智能手机和桌面计算机上
  4. 该操作系统是支持Dart和flutter框架开发的,Flutter 是 Google 用以帮助开发者在 Android 和 iOS 两个平台,同时开发高质量原生应用的全新移动 UI 框架。dart被直接编译成原生代码运行在硬件上,所以比android要快一点

fuchsia的内核

不同于android使用的linux内核,而是使用一种全新的内核Zircon,那么这个内核与linux有什么区别呢?

linux的驱动其实都是文件,但Magenta不是,Fuchsia没有传统的“根文件系统”的概念,各种文件系统、设备驱动、服务都作为一个进程,读写文件就变成了先跟文件系统进程建立一个通道,所有的操作都是异步

因为Zircon是微内核
微内核与单体内核不同,微内核只是将OS中最核心的功能加入内核,包括IPC通信、地址空间分配和基本的调度,这些东西处在内核态运行。
而其他功能如设备驱动、文件系统、存储管理、网络等作为一个个处于用户态的进程而向外提供某种服务来实现,而且这些处于用户态的进程可以针对某些特定的应用和环境需求进行定制

Flutter 特点以及优势

提高开发效率

创建美观,高度定制的用户体验

一切皆为控件

Widget 是 Flutter 应用程序用户界面的基本构建块。每个 Widget 都是用户界面一部分的不可变声明。 与其他将视图、控制器、布局和其他属性分离的框架不同,Flutter 具有一致的统一对象模型:widget。

核心原则

关于跨平台框架

跨平台工具包历来采用以下两种方法之一:
1.将 Web 视图包装在本机应用程序中,并将应用程序构建为网页。
2.包装原生平台控件并提供对它们的一些跨平台抽象。
第一种相关的框架有:Ruby on Rails, Cordova ,Instant App...

优势:一套 HTML5APP 即可同时适用 iOS、Android 平台,适配性和体验较好。版本服务器更新快,技术难度较低,开发工作量小,开发成本低。

劣势:用户体验大幅落后于原生 APP,操作的流畅度,程序的执行效率,与原生 APP都有较大差距; HTML5 APP 受网速的影响较大,在网络情况较差的情况下,HTML5 APP 往往连打开都困难。

第二种相关的框架有:RN, Weex 等。

RN 可以最大限度的接近原生框架,能够在 Javascript 和 React 的基础上获得完全一致的开发体验;构建原生 App,仅需学习一次,编写任何平台;支持线上动态性,可有效避免频繁更新版本。缺点:是采用 Javascript 开发,需学 React,成本高;需要JavaScript 桥接器,实现 JS 到 Native 转化,性能耗损大;必须不同平台写两套代码,依赖暴露的接口。

weex 具有完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出 Native 级别的性能体验,并支持 iOS、Android、YunOS 及 web 等多端部署。缺点:控件太少,基本只能实现最基本的效果;上手难度大。

Flutter 采取不同的方法。Flutter 既不使用 WebView,也不使用操作系统的原生控件。Flutter 使用 Skia 作为其 2D 渲染引擎。该框架建立在 Skia 图形库上,提供实际呈现的部件,而不仅仅是原生控件的包装。

对比RN:Flutter 采用 Dart 开发,可直接编译成 Native 代码,简单易学,又能够像web 一样灵活,同时提供流畅的性能。自带 UI 组件和渲染器,仅依赖系统提供的 Canvas无桥接耗损)。
Flutter 附带的部件库以及开源部件使其成为一个功能丰富的平台。简单地说,Flutter是最接近移动开发人员用于跨平台开发的理想平台,灵活性、性能几乎毫无妥协。
暂不支持线上动态性,目前 Android 支持,ios 不支持。

Flutter 框架

Flutter 框架是一个分层的结构,每个层都建立在前一层之上。


屏幕快照 2019-03-22 下午3.41.45.png

Flutter Framework:纯 Dart 实现 SDK

Flutter Engine:纯 C++实现的 SDK

Flutter 渲染机制

Flutter 布局渲染的整体流程

当需要更新UI的时候,Framework通知Engine,Engine 会等到下个 Vsync 信号到达的时候,会通知Framework,然后Framework 会进行 animations, build,layout,compositing,paint,最后生成 layer 提交给 Engine。Engine 会把 layer 进行组合,生成纹理,最后通过 Open Gl 接口提交数据给 GPU, GPU 经过处理后在显示器上面显示。整个流程如下图:

屏幕快照 2019-03-22 下午3.37.13.png 屏幕快照 2019-03-22 下午3.37.19.png

从流程图可以看出来,只有当有 UI 更新的才需要重新渲染,当然程序启动的是默认

虚拟 DOM 技术

Flutter 编译机制

Flutter 之所以采用 Dart 语言,其中很重要的一点就是因为 Dart 同时支持 JIT 和 AOT两种编译方式

基于 JIT 的快速开发周期(热重载):Flutter 在开发阶段采用,采用 JIT 模式,这样就避免了每次改动都要进行编译,极大的节省了开发时间;

基于 AOT 的发布包: Flutter 在发布时可以通过 AOT 生成高效的 ARM 代码以保证应用性能。而 JavaScript 则不具有这个能力。

JIT,Just-in-time,动态(即时)编译,边运行边编译;
AOT,Ahead Of Time,指运行前编译;

Flutter 为什么选择 Dart

Flutter 在四个主要维度进行了评估,并考虑了框架作者、开发人员和最终用户的需求等因素。发现不同的语言在不同的层面符合一部分需求,但 Dart 在所有评估维度上得分都很高,并且符合我们的所有要求和标准。
Dart 运行时和编译器支持 Flutter 的两个关键特性的组合:基于 JIT 的快速开发周期:允许使用类型的语言进行形状更改和有状态的热重载;以及 AOT 编译器,可生成高效的 ARM 代码,可以快速启动并拥有可预测的生产部署性能。
此外,我们有机会与 Dart 社区密切合作,Dart 社区正在积极投入资源改进 Dart 在Flutter 中的使用。例如,当我们采用 Dart 时,该语言没有提供生成原生二进制文件的工具链(这对于实现可预测的高性能是很有帮助的),但是现在实现了,因为 Dart 团队为Flutter 构建了它。同样,Dart VM 之前已经针对吞吐量进行了优化,但团队现在正在优化VM 的延迟时间,这对于 Flutter 的工作负载更为重要。

Dart 在以下主要标准上得到高分:

参考网址:

https://flutterchina.club/ https://juejin.im/tag/Flutter https://juejin.im/post/5c4e6dc66fb9a049eb3c516a https://www.colabug.com/4164166.html https://www.jianshu.com/p/5aa4f2a7ed0e https://www.jianshu.com/p/d41952e51120 https://www.jianshu.com/p/9e5f4c81cc7d
https://www.zhihu.com/question/50156415/answer/280947564?utm_source=wechat_session&utm_medium=social

上一篇 下一篇

猜你喜欢

热点阅读