鸿蒙与安卓到底有哪些不同?鸿蒙真的是抄袭安卓吗?

大家好。额这两天呢在网上有一篇文章,标题是鸿蒙和安卓的相同点。

这个作者的立意是说鸿蒙是抄袭的安卓,很多地方抄袭了安卓,他举了一些点,截了很多图,拿了很多他认为的这个证据。其实一般来讲,像这种文章我会看,但是我也懒得会去反驳他,因为他是先有结论才去找证据的这样一个思路,那这样的文章其实啊没有什么意思。

但是呢,这篇文章他有一个点本身是有意义,有价值的,就是说鸿蒙和安卓的一个对比。同时呢这篇文章里面涉及到了一些操作系统领域的一些知识,那我觉得跟大家一起把这块聊聊可能也有点意义,所以今天就花点时间我们聊聊跟鸿蒙相关的以及其他的操作系统相关的知识,也再聊一聊~

那么整个文章他说是先从他能懂的看,然后再看开源的代码,一个是先看API,他能看懂,显然这位兄弟应该是一个应用开发工程师,所以看API。然后是gitee上的源码,但是从他的分析来看它的源码的话好像没太看清楚。那就一个一个点的来说吧。

第一个点是说鸿蒙的Ability,具体是page Ability的一个图。

鸿蒙的 Page Ability

android的 activity页面 四大组件之一

然后他认为鸿蒙跟安卓activity的这个图比较相似。

首先呢,鸿蒙的Ability和安卓的Activity确实有比较强的对应关系,但你要说他俩完全相同,我不认可。为什么呢?我们仔细看鸿蒙的这个图里生命周期里有几个状态,灰色框就状态,蓝色框就代表事件,灰色框有initial、inactive、active,再回到inactive,background。background要么回到foreground,要么就是被回收了。大致有这么几个initial、inactive、active、background这几个状态。

那对比安卓的几个状态:launched、running、shutdown、process killed。首先,从名字上来看,这几个就不一样,含有的状态是不一样的。

大家如果仔细看,这俩状态的数量是不一样的,状态的含义也不一样,对应的跳转关系也不一样,所以这两个图他不能说一样,这我就不认同,这怎么可能一样呢~

那为什么看上去一样?这个图就是一个典型的有限自动机FSM,学过计算机都知道。有限自动机在我们很多设计的时候,其实是一种设计模式。如果我的这个组建或者设计对象,它是和一些外部输入有很强的关系的时候,我们就可以用这个自动机的方式去设计。我定义几个状态,然后在不同的输入的时候,它会跳转到不同的状态去,那一个状态跳到另外一个状态。在跳过去的过程中,可能会有一些事件产生,这个事件就会定义成一系列回调函数,往往是以on什么起名的,比如说onStart、onactive,安卓的是onStart、onResume等等。这是一种很常见的一种设计模式,所以你如果去找的话,这种FSM或者有限自动机,你会在很多系统的设计里边找到,他长得都这个样。只不过有时候画线的时候,有时候不是这种直线转弯的线,因为曲线画一下都有。

你在看操作系统的代码设计,编译器的代码设计以及数据库都会有类似的这种设计,这是很常见的,如果你要从这个图说鸿蒙安卓像的话,那这种像的图太多了。

鸿蒙page的生命周期和安卓的activity的生命周期都采用了有限自动机FSM的设计模式,但是他们定义的状态不同,跳转关系也不同,回调函数也不一样。所以,你不能说这两个是一样的。

接着看下面两个后台的对比,鸿蒙的Service Ability和安卓的service,这两个的区别在鸿蒙还把那些跳转关系写出来了,而安卓的没有写跳转关系。

两者对应的函数也不一样,一个是onStart、onCommand,另一个是oncreate、onStartCommand、service running onDestroy,这都不一样。既然状态不一样,对应的回调函数也不一样啊,那你怎么能认为这俩是一样的,对吧?

鸿蒙的 Service Ability (主要是运行在后台的服务)

android的service 四大组件之一

然后第三点,鸿蒙的data ability对应的是安卓的sqlite数据库。

鸿蒙的 Data Ability, 存储相关

android的sqlite3 数据库

首先为什么鸿蒙加data ability而不直接用数据库相关东西?因为鸿蒙里面是有本地数据库和分布式数据库两种数据库接口,为了统一使用方式、访问方式,鸿蒙就做了这个data ability。在这个data ability里面你可以访问本地数据库,也可以访问分布式的数据库,有分布式数据库的这个接口,组件都是一个:data ability。但在安卓里就没有这个概念,安卓里这个基本上就是sqlite。而且sqlite并不是安卓首创的,sqlite出来的比安卓,而且它以前是用于服务器的数据库,只不过安卓把它拿过来放在手机上了。所以说这个东西并不是安卓原创,sqlite谁都能用。不是说安卓独有的东西,这要分清楚。

第四个说intent。鸿蒙的intent和安卓的intent基本上是一样,但其实第一波鸿蒙开发者都给华为提了意见,说不要用intent,它不是什么好东西,这套机制其实很烂。

鸿蒙的intent

安卓的intent

在应用层的apc完全应该提供一种更好更优的一种手段,而不是用intent。但华为架构师考虑的点是:目前的安卓程序员熟悉了这一套东西。就是两个页面或者两个功能之间互调的时候就发个intent过去,这是华为的一种均衡。首批开发都很烦intent,都在说还重新用这干嘛啊?但架构师认为还是要去兼容安卓。但鸿蒙的intent有一个最关键的点,就是可以用于本地的这个ability之间访问,也可以用于分布式的访问。

第五点,布式任务调度,这个作者是这么说的:“分布式任务调度 这个暂且跳过. android我找不见相同的, 默认为 鸿蒙新增的功能 以我目前认知 这个玩意应该是IoT相关. (Ble wifi 蜂窝网) 我暂时判断不出事哪种实现. 按下不表。”那我就补一下吧。

我觉得哈,鸿蒙的分布式调度其核心是ability,围绕ability进行的分布式任务调度,这是一个很复杂的东西,我也就不详细说了,剩下的可以关注我公众号:鸿蒙开发者老王,我就不一一说明了。

我主要是想说一下这个兄弟,太可爱了。在我的眼里。这个兄弟就是他自己口中的这种小可爱。觉得他的这个阅历啊水平啊还有很大的提高空间,但是呢,自己还没意识到。

比如你说,你前面说看代码啊,只看到只看懂的,仔细懂这一块,其他都看不懂。我的天,那你为什么不去看呢?对不对?那你为什么不去学呢?你拒绝去学习,而那个满足于自己对这块的了解。我觉得这不是一种应有的心态。如果你是我的下属,我一定会鼓励你去把所有代码都看了,我一定会这样鼓励你,这样才有利于你的发展啊,让你们不再当一个小可爱了。

我们所有的开发者也都是这样,鸿蒙它打开的是一扇新的大门,大家去打开脑洞,去想新的场景,新的应用,学习新的知识,掌握新的技能,这样才是一个正确的思考的思路啊。

——————

原创:老王丨鸿蒙hms开发者高级认证持证人!学习更多鸿蒙OS相关开发技术可以关注我的公众号:鸿蒙开发者老王

猜你喜欢

转载自blog.csdn.net/Harmony_wang/article/details/120183195