第2次作业—— 谈谈鸿蒙操作系统
一、概述鸿蒙操作系统
- 开发背景:打破操作系统被谷歌、苹果垄断的现象,华为决定自主研发操作系统以防患于未然。
- 需求:为不同设备的智能化、互联与协同提供了统一的语言。鸿蒙是一个全场景,面向未来的操作系统。鸿蒙并不是一个单纯的手机操作系统,而是手机 + 智能设备的总称,可以安装在包括手机、手表、无人机等很多设备上。
- 开发历史:
2012年 | 华为自有操作系统开始进行 |
2017年5月 | 分布式操作系统1.0版本研发完成 |
2019年5月14日 | “华为鸿蒙”商标注册公告 |
2019年5月17日 | 华为正式发布自主知识产权操作系统--鸿蒙,随后在华为智慧屏上投入使用 |
2020年9月10日 | 鸿蒙系统升级至2.0版本,向电视、手表和车内等内存128KB~128MB设备开源 |
2020年12月 | 华为发布基于鸿蒙OS的手机开发者Beta功能 |
2021年4月 | 鸿蒙OS2.0向内存128MB~4GB设备开源 |
2021年5月9日 | 鸿蒙OS2.0开始第二轮公测,新增多款Nova机 |
2021年10月 |
鸿蒙OS计划向4GB内存以上设备开源应用场景及发展趋势 |
- 应用场景
1.统一OS,弹性部署:一套操作系统,满足大大小小所有设备的需求,小到耳机,大到车机,智慧屏,手机等,让不同设备使用同一语言无缝沟
2.硬件互助,资源共享:搭载HarmonyOS 的每个设备都不是孤立的,在系统层让多终端融为一体,成为“超级终端”,终端之间能力互助共享,带来无 缝协同体验。
3.一次开发,多端部署:开发者基于分布式应用框架,写一次逻辑代码,就可以部署在多种终端上。协同体验。
4.应用自由跨端:HarmonyOS 原子化服务是轻量化服务的新物种,它提供了全新的服务和交互方式,可分可合,可流转,支持免安装等特性,能够让应用化繁为简,让服务触手可及。
5.用“简单”激活你的设备智能:HarmonyOS 是新一代智能终端操作系统。为不同设备的智能化、互联与协同提供了统一的语言。设备可实现一碰入网,无屏变有屏,操作可视化,一键直达原厂服务等全新功能。通过简单而智能的服务,实现设备智能化产业升级。
- 趋势:同时随着物联网整体行业的高速增长,鸿蒙系统可发展的空间逐步扩大。随着各行各业加入,鸿蒙生态能力与体验将会呈几何级数爆发。从客厅到厨房,从住房到行车,从休闲到日常工作,人们生活中的方方面面都或将被HarmonyOS Connect智能设备‘包围’。物联网的飞速发展将带来下一个产业变革的历史性机遇,华为携手各类开发者共建的鸿蒙生态,在拥抱万物互联新时代的机遇下,前景不可小觑。我们不妨多一点耐心与等候,静待鸿蒙佳音!
二、关于鸿蒙是否套壳的争议
- 什么是创新
按照一贯的定义来讲,创新是指以现有的思维模式提出有别于常规或常人思路的见解为导向,利用现有的知识和物质,在特定的环境中,本着理想化需要或为满足社会需求,而改进或创造新的事物、方法、元素、路径、环境,并能获得一定有益效果的行为。鸿蒙搭载了智慧屏,智能家电等,在万物互联的大背景下,鸿蒙拥有更强的兼容性,它能够将生活场景中的各类终端进行能力整合,形成一个超级虚拟终端,可以实现不同的终端设备之间的快速连接、能力互助、资源共享,匹配合适的设备、提供流畅的全场景体验。如果只比较在手机,那鸿蒙OS或许并无优势,但是当鸿蒙OS连接更多各种各样的设备时,鸿蒙OS的优势大大体现,而这是iOS和安卓无法比拟的,这也正是鸿蒙的创新所在,它拥有自己的概念与思想,并非所谓的“换皮抄袭”!
- 代码复用与创新的关系
鸿蒙OS的部分代码基于ASOP,因为ASOP是由谷歌联合34家手机终端和运营商企业共同发起的项目,全称是安卓开源项目,而华为正是其中之一,ASOP代码并非谷歌的专利,华为也做出了重要贡献,因此华为有权使用ASOP代码,且完全不与“套壳”挂钩!选择代码服用是“明智的”,安卓与IOS拥有全世界最多的使用者,为了保证用户量与用户体验,鸿蒙要做到兼容安卓系统,循序渐进,当它蓄到足够的能量时,便可彻底“甩手”ASOP。鸿蒙OS是面向万物互联的全场景操作系统,是安卓与苹果系统前所未有的创新,而手机也只是鸿蒙OS众多载体之一。
三、代码风格分析
- 好的代码风格1 :
…
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct
{ int len;
int len1;
char data[0];
}SS1;
…
分析:包含了使用字符串函数的所需的原型和声明,便于程序执行错误检查 ,可读性较强
2.好的代码风格
…
@Test 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.不好的代码风格
…
printf("--------------------------2------------------------------\n");
typedef struct
{ int len;
int data[0];
}SS;
SS sa;//结构体相关的局部变量初始化,不初始化后面的数据是一个随机值
//SS sa={0};
memset(&sa,0,sizeof(SS));//清空以上结构体中的随机值
printf("sizeof(SS)=%d\n",sizeof(SS));
printf("len=%d\n",sa.len);
printf("data=%d\n",sa.data[0]);
sa.len = 10;
sa.data[0] = 80;
sa.data[10] = 80;
sa.data[20] = 80;
sa.data[50] = 80;
sa.data[60] = 80;
sa.data[65] = 80;
sa.data[66] = 80;//到了67就不行了
printf("len = %d\n",sa.len);
printf("data0 = %d\n",sa.data[0]);
printf("data10 = %d\n",sa.data[10]);
printf("data20 = %d\n",sa.data[20]);
printf("data50 = %d\n",sa.data[50]);
printf("data60 = %d\n",sa.data[60]);
printf("data60 = %d\n",sa.data[65]);
printf("data60 = %d\n",sa.data[66]);
printf("sizeof(SS) = %d\n",sizeof(SS));
printf("sizeof(sa) = %d\n",sizeof(sa));
//SS1 sa1={0};
printf("sizeof(SS1)=%d\n",sizeof(SS1));
printf("sizeof(SS2)=%d\n",sizeof(SS2));
printf("sizeof(SS3)=%d\n",sizeof(SS3));
…
分析:代码书写有冗余,繁琐复杂,定义变量允许的范围太小
4.不好的代码风格
…
printf("--------------------------22------------------------------\n");
int kk[1000] = {0};
int *mk = (int*)malloc(sizeof(int)*1000);//注意强制类型转换
if (mk == NULL)
{
printf("动态内存申请失败\n");
}
…
分析:编译时申请内存,过大实际存储少,浪费,容易溢出。