Android 的前生今世

Android 系统

Android系统作为全球第一大系统,基于 Java 开发的移动端有着诸多的性能优势。 2018年前 H5 的性能瓶颈和 RN 的停更 导致业界对跨平台开发失去信心。 直到2018年10月Google推出首个 Flutter 跨平台解决方案,打破整个移动开发的方向。

为什么 Flutter 成为 Android 方向标

  1. 跨平台性:Flutter基于图像绘制引擎进行渲染,在不同平台下绘制效果是绝对一致的,能做到真正的跨平台,一处写处处运行
  2. 性能优异性:不同于H5通过DOM渲染 和RN映射组件,Flutter直接基于native进行绘制。性能上完全超过原生
  3. 热重载性: Android原生开发 会遇到 编译-打包-安装 三部曲。开发效率迟迟得不到提升。热重载技术在Flutter内完美体现

Flutter 详细介绍

  1. Dart 语法编译:Dart 是一种强类型、跨平台的客户端开发语言。具有专门为客户端优化、高生产力、快速高效、可移植易学的风格。Dart主要由Google负责开发和维护
  2. Flutter 插件:Flutter使用的Dart语言无法直接调用Android系统提供的Java接口,这时就需要使用插件来实现中转。Flutter官方提供了丰富的原生接口封装

Flutter 系统结构

image

Skia 图像处理引擎

  1. 2005年Skia图像处理引擎成立,用来展示Chrome 火狐 和其他Google自家的产品使用。
  2. 2007年 第一个Android系统问世,于是Google开发者将Skia移植到Android平台。
  3. Skia作为一个2D的图形系统,包括绘图,渲染,显示图片都是用Skia完成。

原生开发会接触 SKia 吗?

image

Skia 引擎详解

  • 疑问: 是真的吗?我只接触过 Bitmap,原来 Bitmap 下面还有很多奥秘

image

Skia 引擎与 Flutter 有什么关系勒?

  • 除了通过xml方式定义布局 或者继承View 显示在Android屏幕外 还有没有 方法呢?

image

为什么 Flutter 会实现三大特性

image

跨平台

image

性能优异

image

渲染流程

image
React 渲染与 Flutter 渲染相同点

image
Flutter 渲染

在 Flutter 界面渲染过程分为三个阶段:布局、绘制、合成,布局和绘制在 Flutter 框架中完成合成则交由引擎负责。

image

之前,Google发布了Flutter前端框架的1.0版本。有同学要问,Flutter是什么东东?Flutter是Google基于Dart语言的一款前端框架,目前可以在Android和iOS平台进行编译运行,其运行效率可以媲美原生应用,这也是区别于JS类跨平台框架,如weex、Taro、React Native等的最大优势,同时,Dart语言最早也是Google发布出来想要改进JS的语言,所以Dart to JS是不成问题的。据悉,Flutter接下来也是要通过编译为JS打通Web端开发的。至此,Flutter不但可以跨主流移动操作系统iOS和Android,还可以通过浏览器和类似PWA的应用,打通主流桌面操作系统Windows、MacOS和Linux。

 

Google已经研发两年多的,最新打算用来取代Android的移动操作系统Fuchsia OS,根本前端就是用Flutter框架写的,如果Fuchsia系统发布,那Flutter和Dart一定是一跃成为首选前端编程语言和框架,只是苦了广大程序员,又有新东西要学了……

还有就是Google的Go语言增长势头迅猛,伴随其媲美C++的效率、极简的服务器并发编程、高效的服务器运行效率和现代化的编程特性和方式,国内外大部分公司都对其进行了应用,用来取代之前的一些接口和服务器应用。其中Docker就是最著名的例子。而Go语言早已突破1.x阶段,正稳步迈向2.0阶段。

 

我们可以清晰地看到Google的布局和野望,Dart主攻前端和移动端,Go主攻服务器端。前后端通吃,不同于微软的C#和苹果的OC和Swift,Google的布局似乎更加全面,应用和影响也更加广泛。Google统一前后端开发江湖的野望也会在一定程度上实现,至少,开源的语言和有实力的靠山公司,会比别家实现的好。

现在开始玩Flutter的好处呢, 我认为有如下几点:

1、如果我们以后想在Google的新系统上跑程序的话, 用Flutter来编写是一定没错的. 当然最近的报导显示, Fuschia原生支持ART, 因此Android程序应该也可以. 不过直接上Flutter我认为更好.

2、Flutter用Dart, 学习Flutter的同时会使我们掌握一门新的语言. 买一送一.

3、Flutter天生支持iOS风格的控件, 称为Cupertino, 这样我们可以一套设计, 一套code跑在两个系统上.

4、学习Flutter的过程会改变手机端app开发的思维. 毕竟这个亲只有一个activity. 全程跟个游戏引擎一样. 60帧每秒绘图.

5、Hot reload. 极大地加速了我们的开发效率. 试过了, 绝对会爱上它.

6、Flutter提供method channel给Android和iOS. 其实我们可以只用Flutter来开发UI. 其他底层逻辑可以封装Android和iOS分别的lib package. 然后直接Rx封装写回method channel. 也是一种新的开发模式.

7、性能更好, 兼容性更好, 开发起来更有乐趣, 这才是程序员的人生. 而Flutter都能满足.

如何学习Flutter:
https://blog.csdn.net/androidstarjack/article/details/87720925

从目前的情况和节奏来看,这次 Google 是认真的,承前启后的为它的下一代操作系统 Fuchsia 提前铺了路! 所以,我还是建议,平常你没事的时候可以开始学习了,等到真正成熟的时候,你就会一马平川的。不知道,你看好 Flutter 吗?欢迎你在文章底下留言交流看法。

阅读更多

一份完整的Android Studio搭建Flutter教程

如果对技术开发比较感兴趣,可以关注我的公众号:终端研发部,id:codeGoogler

Google 以 Flutter 作为原生突破口,移动端即将统一了的更多相关文章

  1. 原生js移动端列表无缝间歇向上滚动

    在项目开发中尤其是在项目的活动页面的开发中,经常需要将用户的购买信息或中奖信息等以列表的形式展示在页面当中,并可以使其自动间歇向上滚动来达到在有限的区域内展示所有信息的目的.通常的做法是通过将列表父元 ...

  2. Flutter 即学即用系列博客——08 MethodChannel 实现 Flutter 与原生通信

    背景 前面我们讲了很多 Flutter 相关的知识点,但是我们并没有介绍怎样实现 Flutter 与原生的通信. 比如我在 Flutter UI 上面点击了一个按钮,我希望原生做一些处理,那么原生怎么 ...

  3. Flutter和原生交互学习

    PlatformChannel功能简介 PlatformChannel分为BasicMessageChannel.MethodChannel以及EventChannel三种.其各自的主要用途如下: B ...

  4. Flutter ChartSpace:通过跨端 Canvas 实现图表库

    基于Flutter 的图形语法库,通过跨端 Canvas ,将基于 Javascript 的图形语法库 ChartSpace 扩展至 Flutter 端 作者:字节跳动终端技术--胡珀 背景 数据平台 ...

  5. 原生js移动端touch事件实现上拉加载更多

    大家都知道jQuery里没有touch事件,所以在移动端使用原生js实现上拉加载效果还是很不错的,闲话不多说,代码如下: //获取要操作的元素 var objSection = document.ge ...

  6. 纯原生js移动端图片压缩上传插件

    前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...

  7. 纯原生js移动端城市选择插件

    接着上一篇纯js移动端日期选择插件,话说今天同事又来咨询省市县联动的效果在移动端中如何实现,还是老样子,百度上一搜,诶~又全是基于jquery.zepto的,更加可恨的是大多数都是PC版的,三个sel ...

  8. Google的Flutter工具允许开发者开发跨平台应用

    与大多数应用程序开发人员交谈,他们会告诉你,与iOS相比,制作Android应用程序要困难得多,也更复杂,也不那么有趣.实际上,如果你要求报价,这两种软件都将单独定价,因为它们都需要单独的开发时间和团 ...

  9. MethodChannel 实现flutter 与 原生通信

    Flutter 步骤 目的:在flutter页面中主动调用原生页面中的方法. 1 在widget中,定义MethodChannel变量 static const MethodChannel metho ...

随机推荐

  1. android AVD 启动时报错

    AVD启动报错 1.提示:ANDROID_SDK_ROOT is undefined / ERROR: This AVD’s configuration is missing a kernel fil ...

  2. Activiti6-IdentityService(学习笔记)

    IdentityService并不依赖我们的流程部署文件,所以 直接放使用方法的测试代码了: public class IdentityServiceTest { private static fin ...

  3. git总结二、关于分支上——好好认识下分支是怎么回事

    同样需要先来明确两件事: HEAD指针指向的是当前分支 分支(master, dev)指向的是最新的提交 一开始,git 中只有一个master分支,严格来讲,HEAD不是指向提交而是指向master ...

  4. react-native-echarts在打包时出现的坑

    react-native-echarts目前是RN开发中使用echarts图表最好的插件了,用法与Echarts完全一致,默认提供了三个属性: option (object): The option ...

  5. Manual write code to record error log in .net by Global.asax

    完整的Glabal.asax代码: <%@ Application Language="C#" %> <script RunAt="server&quo ...

  6. React Fullpage

    之前项目需要,单独拿出来做了个demo 目前仅支持收尾加autoheight github地址:https://github.com/zlinggnilz/React-Fullpage

  7. django xadmin(2) 在xadmin基础上完成自定义页面

    1.在xadmin.py,GlobalSettings中自定义菜单 2.自定义视图函数,并获取原来的菜单等一下信息(主要是为了用xadmin的模板),具体的自己看xadmin源码 3.在adminx. ...

  8. Redis读取出错,JSON序列化的问题

    报错 org.springframework.web.util.NestedServletException: Request processing failed; nested exception ...

  9. 数据库MySQL——初识

    认识数据库—MySQL 楔子 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来hold住十一期间全国的购票需求,你怎么写? 由于在同一时段抢票的人数太多,所以你的程序不可能写 ...

  10. Curl请求慢

    背景原因:测试环境发现一个连接内网访问和外网访问延迟差别很大,内网访问很快.外网访问很慢.于是我们用curl来诊断问题所在的区域! 命令如下: 1 curl -o /dev/null -s -w %{ ...