2020Android又凉了?来看看Android的发展-谈一下当下最合适的架构

前言

前前后后经历过大项目、小项目,跨平台,小程序,Nodejs服务等等,目前在做的Rom开发,定制各种手机中的奇葩需求,从应用层到Framework层,再到C++层,再到驱动,最终到Linux,研究过java虚拟机,虽然没研究过ART或者老牌的Dalvik虚拟机,但原理都差不多,并不影响我对android有一个全局的认识,今天我们的主题是架构,其实对架构的理解一定要宏观一点,大到手机操作系统架构,小到代码逻辑设计的架构,一句老话讲的好,也代表了我对架构的整体理解:没有最好的架构,只有最合适的架构。下面我们聊聊,一个好的架构是什么样子的,该怎么去判断呢。

好的架构应该有的优势

大道至简

简单直白、朴实无华、科学至真、人生至理、灵魂至美,简单是一个架构好的灵魂。这是考验一个架构师的终极指标,如何保证简单的设计,来让大部分人接受,用起来简单,又可以保证架构的稳定性,保证不被破坏,很难很难。

万变不离其宗

以不变应万变,好的架构,总能抓住不变的部分,将变的部分做好抽象,满足各类场景,在我们代码的世界里就是做好接口和抽象。

抽丝剥茧

丝得一根一根地抽,茧得一层一层地剥,对的,一个好的架构绝对是层次分明,各司其职,做人做事一样,做好自己不越界是门技术活。世间万物,都是独立的存在,可以很近,又可以很远。代码架构的设计当然离不开层次的设计。

领域驱动

架构不是满足所有领域,不是大杂烩,他是针对特定领域的最完美的总结,关注特定领域,保持初心。

Android架构演进

MVC > MVP > MVVM

我们先回顾一下google为我们做了什么,一开始我们接触android,大家都在用MVC,甚至可以说没有架构,而且那个时候app是真的简单,但随着不断的迭代,问题越来越多,google也发现了这个问题,于是github开源了MVP架构的示例,教我们如何整合框架,如何在架构设计上保证业务的发展需求,再到现在主推的MVVM,其实不难发现一个共性,WEB端大家都知道吧,你看现在最火的React、Vue,不都是MVVM的架构吗(有人说不是,有人说是,这里不多解释,我们不应该纠结是不是,应该理解M-V 、 V-M 是数据绑定UI,无非是单向还是双向的,都属于一种理念吧,理解就行。)

原生 > React Native > Flutter

一个好的架构只是MVC到MVVM吗?

我不这么认为,从一开始我们接触到原生的Android开发,到后来大火的React Native,我们16年还专门集成了React Native模块,但做了几个迭代后放弃了,我们发现为了适配Android、Ios 也花费了很多时间,倒不如用原生做的好用。目前最火的Flutter,也是Google主推的跨平台框架,而且我们现在就在C端项目中集成了,效果还不错,虽然也是有很多问题,但总体来看比React Native 要好,还有一点Google内部正在开发的另一个操作系统Fuchsia的UI layer采用的是Flutter,也就是说Flutter天然可以支持Android、IOS以及未来的Fuchsia。在大前端方向,对于跨平台开发中一直在不断迭代中寻找更好、更优的解决方案,目前来看Flutter还是更有优势

Java > Kotlin,Dart

来说说语言,你说语言属于架构吗?我也不知道,但这是我架构的时候考虑的一个方向,语言是我们组织架构最基础的单元,kotlin的普及,应该不仅仅是google认为语言不错,让我们广大开发者使用,其实这里面涉及了很多东西,我们知道最新的android引用的是open jdk,前几年的官司打个不停,付出了不少人力财力,这肯定不是我们还要考虑的,但有一点可以肯定,kotlin语言确实是个趋势,因为他有更合理的设计,更安全的性能表现,更加简洁的代码,当然你可以用java写android写到老,我也不认为你用kotlin写就一定比java写的好,看个人选择吧。再说说Dart,这个我就有点不理解,为啥Flutter一定要用Dart写,好像Google工程师这么回答:说Dart就在隔壁啊,好沟通。哈哈。

通过上面的闲扯,我们基本已经有了架构的雏形了吧
MVVM + 原生 + Kotlin

MVVM + 原生、Flutter + Kotlin、Dart
等等..
自己组合吧,我目前选择第二种,相信很多人的项目都已经是这样了。那么接下来我们就要实现这样的架构,架子有了,就该塞东西了,这样就显得饱满一些。

###总结
从Android的架构演进,不难看出未来的世界肯定是大前端的,所谓的大前端也许是大佬们一个概念,但从这几年好多大统一的技术出现,感觉未来不远,也许就是明天,在这奉劝各位读者,提升自己就在现在,T型人才未来才是互联网的中流砥柱。

文章不易,如果大家喜欢这篇文章,或者对你有帮助希望大家多多,点赞转发关注 。文章会持续更新的。绝对干货!!!

原文地址:https://blog.51cto.com/14775360/2487257

时间: 04-14

2020Android又凉了?来看看Android的发展-谈一下当下最合适的架构的相关文章

对Android今后发展的看法

Android是众多手机商的宠儿,占据着手机市场的半壁江山.这充分展示了它的优越性.Android还很年轻,然而这轮新日势如破竹般地崛起,开创出现今的盛景.接下来它是烈火烹油,鲜花着锦:还是像塞班一般陨落?我们尚且不得而知.但正如邓小平所说"发展才是硬道理",Android的前景亦在于此. 在我基于亲身操作体验所得的浅见看来,Android虽然在整体上具有极大优势,并且它的优势因其开放性的促进在不断的拉大,然而细节之处还是iPhone更显关怀.在我的个人感觉中Android系统与iOS

Android基础入门教程——1.1 背景相关与系统架构分析

Android基础入门教程--1.1 背景相关与系统架构分析 1.Android背景与当前的状况 Android系统是由Andy Rubin创建的,后来被Google收购了:最早的版本是:Android 1.1版本 而现在最新的版本是今年5.28,Google I/O大会上推出的Android M,有趣的是Android系统的命名都是以点心来命名的,下述表是15个Android版本名称,对应API号以及发布时间! 系统版本名称 API版本号 发布时间 Android 1.5:Cupcake:纸杯

Android的发展历程及搭建

Android的发展历程: 对于Android我比较不熟悉,因为我的第一只手机就是iphone,我没用过Android系统,但在中国使用带有Android系统的手机的人数是最多的,所以我想学习Android系统的软件开发,接下来我就简单介绍一下Android的发展历程. Android系统的开发使用的是Java语言.Android系统主要由Google和开放手机联盟领导和开发.Android公司在2003年创建,后由Google收购.经过几年的开发,2008年Android系统最早的版本终于面世

android的发展

昨天搭建了android的开发环境,现在自己在看的那本书是叫做<Google Android开发入门与实战>,很容易就可以载下这本书.其他地方没有,在前天我写的博文上的论坛上面肯定有的.开始的时候就把开发环境搭建是因为每个人在学习的过程中,希望可以看到前景,这样学习的热趣会好很多的.因为很多人都一样希望开始的时候就会好奇后面有什么东西,所有昨天大家可以写出"hello world"了.今天和大家介绍android的发展和其他的一些相关包的介绍,其中错误的地方希望大家帮忙纠正

Android 并发编程:(一)基础知识 —— 架构和组件

本章节所有内容皆为原创,如需转载,请注明出处. http://blog.csdn.net/manoel/article/details/38462631 写在前面的话 很久没写博客了,一是因为自身水平有限,怕误人子弟:二是因为感觉没什么可写的:三是因为时间有限,要寻找工作.学习和生活之间的平衡. 最近一直在研究和梳理Android多线程编程的东西,希望能够把这些分享给大家. 想必做过Android应用开发的同学应该都会知道,多线程是一个特别"诡异"的地方.之所以称为"诡异&q

将 Android* Bullet 物理引擎移植至英特尔&#174; 架构

简介 由于目前的移动设备上能够使用更高的计算性能,移动游戏现在也可以提供震撼的画面和真实物理(realistic physics). 枪战游戏中的手雷爆炸效果和赛车模拟器中的汽车漂移效果等便是由物理引擎所提供,其核心是物理模拟. 一般而言,物理模拟决定了游戏引擎的性能. 一款游戏成功与否通常取决于物理引擎计算物理模型的速度和准确度. 本文将介绍如何构建 Android 版 Bullet 物理引擎并将其移至到基于英特尔? 凌动 SoC 的平台. Bullet 物理 Bullet 物理库是一个实时物

Android架构思考:没有完美的架构,只有合适的架构

app发展到一定规模,就面临方法数超过65535的问题,前路怎么走,是像美团或者微信那样拆分成多个dex还是像淘宝,携程那样拆成多个bundle,怎么向前走? 没有完美的架构,只有合适的架构.但是类似电商业务的app还是比较适合做多bundle方案,因为一个app中包含很多业务,而且业务都在快速迭代,除了核心链路,业务之间没有直接联系,这些业务都是由各个小团队负责,拆分成多bundle以后,加快了编译速度和启动速度,还可以做懒加载,按需加载,动态部署,做多bundle方案需要团队对app启动过程

如何为Android上的产品设计一款合适的图标

如 果你已经完成了你的app,你一定会马上向其它人宣布这件事情.但是你需要注意一个很重要的问题,那就是app的图标.你的图标可能在项目启动之 前就已经设计好了,但我不喜欢这样,如果app没有完成实际上图标也没什么用了.如果你不是一个设计师,图标的确是很让人头疼的事情. 但总有一些方式可以让工程师们也能独立的设计出不错的图标.我们以Andriod应用为例,现在就来为你的产品设计一款合适的图标. 准备 在设计之前,你应该看看iconography reference guides,这是Android

Android开发-浅谈架构(二)

写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应该不是这样,但是我想说的是 自从我想写一些笔记记录知识的时候 为了不误导其他人 我不得不参考github 一些比较知名大牛的代码.在这个过程中 我下载过很多demo.一点一点的啃 汲取精华的部分 当然也充满疑惑.后来觉得标题取得有点大了 我应该取"学习"类的标题才对.但是另一方面我也只能就

android - startActivity浅谈

当执行startActivity(Intent intent, Bundle options)函数的时候,应用程序不是直接呼叫另外一个Activity,而是将intent传进Android框架中.Android框架会查看startActivity呼叫传入的动作与Intent内容是否在注册表中,如果符合,就启动对应的服务或Activity. Android 系统中的每一个应用程式,在安装的过程里,都得事先在 Android 框架中注册.登记这个应用程式所建立的 Activity ,并事先注明会使用