脚本宝典收集整理的这篇文章主要介绍了软件工程2021:第2次作业——谈谈鸿蒙操作系统,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
一、概述鸿蒙操作系统 1、开发背景 面对西方国家的技术封锁,用于独立自主的研发操作系统是迫切的需求,华为开始布局自有分布式操作系统。
2、需求 面对美国的打压,华为迫切需要弥补在技术上的不足,拥有独立自主的操作系统,并且在数字化新时代的到来下,要满足未来万物互联时代的需求。
3、开发历史 2012年,在华为“2012诺亚方舟实验室”专家座谈会上,任正非提出要做终端操作系统。
2017年,鸿蒙OS内核1.0完成技术验证,并逐步开展内核2.0研发。
2018年,鸿蒙内核2.0已被应用于终端TEE。
2019年,鸿蒙OS 1.0版本正式亮相,其关键模块均为自研,同时具备分布式架构、方舟编译器、确定时延引擎、TEE微内核形式化验证以及多终端开发IDE(Beta)。
2021年,鸿蒙操作系统正式开启大规模商用。
4、应用场景与发展趋势
鸿蒙系统的应用场景可以概括为1+8+N。1+8+N战略的核心是1 ,智能手机作为鸿蒙生态的核心部分,凭借华为海思自研的麒麟芯片,为其他设备终端提供相应的通信支撑。8是指PC、平板、智慧屏、音箱、眼镜、手表、车机、耳机,这8项将由华为公司亲自研发和参与市场,并且会追求市场领先地位。N是摄像头、扫地机、智能秤等外围智能硬件,涵盖移动办公、智能家居、运动健康、影音娱乐、智慧出行五大场景模式。鸿蒙操作系统的发展趋势,是立足于构建全域物联网服务体系平台,基于鸿蒙的全开放体系,未来鸿蒙的应用,是整个物联网,而不是单纯的手机,这才是鸿蒙的终极目标。
二、关于鸿蒙是否套壳的争议 1、什么是创新 创新百度百科的定义是指以现有的思维方式提出有别于常规或常人思路的见解为导向,利用现有的知识和物质,在特定的环境中,本着理想化需要或为满足社会需求,而改进或创造新的事物、方法、元素、路径、环境,并能获得一定有益效果的行为。鸿蒙与安卓都是基于Linux开发,并且鸿蒙采用了部分AOSP(安卓开放源代码项目)的代码,而被质疑缺乏创新和套壳安卓,但AOSP不属于谷歌,也不是消费者普遍认知的AndROId系统,华为作为安卓开放联盟的成员,对AOSP的贡献良多,使用部分代码没有问题。设计操作系统,不是所有的代码都要自编,就像造车不一定非要从设计轮子开始,鸿蒙是采用微内核设计的分布式操作系统,这与安卓已经有很大的不同,这便是鸿蒙的创新所在。
2、代码复用与创新的关系 复用开源的代码,就不是创新是无稽之谈,创新是在别人的基础之上,创造新的事物,满足社会需求,能创造新的事物满足社会需求的都能称为创新。良好利用现有开放的资源,进行创新,能极大提高生产开发的效率,鸿蒙的内核基于Linux开发,鸿蒙采用了部分AOSP的代码,对于这些开源代码的良好复用,这能提高生产开发的效率,并且鸿蒙有更多创新的方面,所以代码合适的代码复用提高创新的效率。
三、代码风格分析 1、好的代码风格 代码示例:
int32_t TelephonystateRegistryService::UnregisterStateChange(int32_t simId, uint32_t mask, pid_t pid)
{
std::lock_Guard<std::mutex> guard(lock_);
int32_t result = TELEPHONY_STATE_UNREGISTRY_DATA_NOT_EXIST;
std::vector<TelephonyStateRegistryRecord>::ITerator it;
for (it = stateRecords_.begin(); it != stateRecords_.end(); ++it) {
if (it->simId_ == simId && it->mask_ == mask && it->pid_ == pid) {
stateRecords_.erase(it);
result = TELEPHONY_SUCCESS;
break;
}
}
return result;
}
命名规范,变量都要以驼峰命名法或大写下划线的方式去命名,变量名要体现变量的意义,避免歧义,提高可读性
2、好的代码风格
void TelephonyObserverProxy::OnSignalInfoUpdated(const std::vector<sptr<SignalInformation>> &vec)
{
MessageOption option;
MessageParcel dataParcel;
MessageParcel replyParcel;
option.SetFlags(MessageOption::TF_ASYNC);
int32_t size = vec.size();
if (size <= 0 || size > MAX_SIGNAL_NUM) {
TELEPHONY_LOGE("TelephonyObserverPRoxy::OnSignalInfoUpdated size is error.n");
return;
}
dataParcel.Writeint32(size);
for (const auto &v : vec) {
v->Marshalling(dataParcel);
}
sptr<IRemoteObject> remote = Remote();
if (remote == nullptr) {
TELEPHONY_LOGE("TelephonyObserverProxy::OnSignalInfoUpdated remote is null.n");
return;
}
int code = remote->SendRequest(ON_SIGNAL_INFO_UPDATED, dataParcel, replyParcel, option);
TELEPHONY_LOGD("TelephonyObserverProxy::OnSignalInfoUpdated##error: %{public}d.n", code);
}
尽量以if(){retrun;}形式代替else,else if的使用 3、不好的代码风格
int32_t TelephonyStateRegistryService::UpdateCellularDataConnectState(
int32_t simId, int32_t dataState, int32_t networkTyPE)
{
std::lock_guard<std::mutex> guard(lock_);
int32_t result = TELEPHONY_STATE_REGISTRY_DATA_NOT_EXIST;
if (VerifySimId(simId) &&
(cellularDataConnectionState_[simId] != dataState ||
cellularDataConnectionNetworkType_[simId] != networkType)) {
for (size_t i = 0; i < stateRecords_.size(); i++) {
TelephonyStateRegistryRecord record = stateRecords_[i];
if (record.IsExistStateListener(TelephonyObserverBroker::OBSERVER_MASK_DATA_CONNECTION_STATE) &&
(record.simId_ == simId) && record.telephonyObserver_ != nullptr) {
record.telephonyObserver_->OnCellularDataConnectStateUpdated(dataState, networkType);
result = TELEPHONY_SUCCESS;
}
}
cellularDataConnectionState_[simId] = dataState;
cellularDataConnectionNetworkType_[simId] = networkType;
}
SendCellularDataConnectStateChanged(simId, dataState, networkType);
return result;
}
if判断条件过多,if与for的嵌套层数比较多 ,可读性较差
以上是脚本宝典为你收集整理的软件工程2021:第2次作业——谈谈鸿蒙操作系统全部内容,希望文章能够帮你解决软件工程2021:第2次作业——谈谈鸿蒙操作系统所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。