一、概述鸿蒙操作系统
-
开发背景:
因美国政府的制裁,华为急需开发自家系统。一方面芯片的备胎全部转正,另一方面注册了自己的操作系统——“鸿蒙”。
-
需求:
(1)、新数字化时代需要新的操作系统;
(2)、网络安全威胁呈现多元化、复杂化、频发高发趋势,需要一个足够安全的系统进行保障;
(3)、AloT场景天然要求多设备智能协同,因此需要一个适合各类型机器的操作系统;
(4)、中国面临严峻的挑战,独立自主的研发操作系统是迫切的需要;
(5)、TB、PB大数据需要一个能够提供多机互联的操作系统。
-
开发历史:
2012年9月,在华为“2012诺亚方舟实验室”专家座谈会上,任正非提出要做终端操作系统,以防范于未然要在“断了我们粮食的时候,备份系统要能用得上”,而这就是“鸿蒙”操作系统的起点。
2017年,鸿蒙OS内核1.0完成技术验证,并逐步开展内核2.0研发。
2018年,鸿蒙内核2.0已被应用于终端TEE。
2019年,鸿蒙OS 1.0版本正式亮相,1.0版本基于开源框架,其关键模块均为自研,同时具备分布式架构、方舟编译器、确定时延引擎、TEE微内核形式化验证以及多终端开发ID(Beta)。
2021年,鸿蒙操作系统正式开启大规模商用。
-
应用场景:
智慧屏、智能座舱、智能家电、摄像头、扫地机、智能称
-
发展趋势:
鸿蒙系统让国内的手机市场流动起来,让国内手机市场真正重视研发,华为鸿蒙系统采用微内核,顺应了当下互联网和物联网的发展潮流,未来可期。
二、关于鸿蒙是否套壳的争议
-
什么是创新(联系鸿蒙系统分析):
创新是指创造新的,具有创造性,有新意的。而就关于鸿蒙系统是否套壳这件事情,鸿蒙系统相比于安卓系统不仅仅更加流畅,而且长时间使用不易卡顿,加强了互联功能。并且鸿蒙系统兼容性,安卓系统上正常使用的软件在鸿蒙系统上也能正常使用。之所以鸿蒙系统兼容安卓软件,是因为鸿蒙系统很多代码都是基于AOSP的,任何组织或个人能够中使用安卓的基础源代码,并且代码不全是谷歌写的。华为鸿蒙系统负责人也称鸿蒙系统将迎来几乎没有来自ASOP社区谷歌贡献代码。鸿蒙系统是比安卓系统的改进,加强,不能说是完全套壳。
-
代码复用与创新的关系:
代码复用是指同一份代码在需要的时候可以被重复利用,代码复用最简单的是直接的使用该类的一个对象,也可以是将一个类的对象置于新的类之中。代码的复用也是对原先代码的再一次加工,因此也算是在原先基础上的创新。
三、代码风格分析
-
好的代码风格1
°代码:
“···
static int aa = 0; @Test public void test(){ long start = System.currentTimeMillis(); for (int i=0;i<1000000000;i++){ aa++; } long useTime = System.currentTimeMillis()-start; System.out.println("useTime:"+useTime); }
···“
- 分析:逻辑清晰,使用类的静态变量,进一步优化代码
2.好的代码风格2
°代码:
public void test(){ long start = System.currentTimeMillis(); int aa = 0; for (int i=0;i<1000000000;i++){ aa<<=1; aa>>=1; } long useTime = System.currentTimeMillis()-start; System.out.println("useTime:"+useTime); }
- 分析:使用位运算比使用乘除法运算更优化系统速度,效率更高。逻辑清晰,更利于理解。
3.不好的代码风格1
°代码:
“···
if (productClass === Card && action === BUYCARD) { seneca.sendSms(smsData, params) } if (productClass === Card && action === TURNCARD) { seneca.patchStatus(productId) } if (productClass === Card && action === REPLACE) { seneca.changeStatus( crm , Card ) } if (productClass === Lesson ) { seneca.changeStatus( course , Lesson ) }
···"
- 分析:每个判断都要执行一次,显得很麻烦,没有必要。
4.不好的代码风格2
°代码:
public void testExpression(){ long start = System.currentTimeMillis(); double d = Math.random(); double a = Math.random(); double b = Math.random(); double e = Math.random(); double x,y; for(int i=0;i<10000000;i++){ x = d*a*b/3*4*a; y = e*a*b/3*4*a; } long useTime = System.currentTimeMillis()-start; System.out.println("useTime:"+useTime); }
- 分析:x,y 两个计算表达式完全相同,多次运算造成重复。