关于鸿蒙系统开源和技术细节的一些探讨

1月18日在深圳举办了“鸿蒙生态千帆启航仪式”,这也是华为鸿蒙开启生态进阶的信号。在政策的叠加下,鸿蒙未来必定是势不可挡的。我们这些程序员也得与时俱进,熟悉鸿蒙的技术和细节,别在经济寒冬里被淘汰了。

官方称 Harmony OS NEXT开发者预览版将在2024年第一季度面向开发者开放。2024年9月,最新版的HarmonyOS将进入独立生态体系,不再兼容安卓应用。需要及时构建一套基于鸿蒙原生APP的服务,以保障鸿蒙用户的业务连续性。本文我们来聊聊鸿蒙的一些技术细节,也欢迎大家在评论区补充。

宏内核与微内核

先来聊聊内核,内核是操作系统内最基础的构件,因此内核的设计对于操作系统的外部特性也有着至关重要的影响。常见内核结构可以分为宏内核、微内核、混合内核、外内核等。

虽然鸿蒙与安卓都是基于Linnux开发的,区别在于安卓是基于宏内核结构设计,而鸿蒙是基于微内核结构设计。鸿蒙系统使用C和C++编写,不需要虚拟机这一中间过程(当然,过度期间是需要AOSP的),因此运行效率更高。

宏内核:存在历史最长内核,也在应用领域占据着主导地位,比如安卓。

微内核:较新内核结构,但是它拥有着众多宏内核不具有的优良特性,因此被华为选用。

在这里插入图片描述

在这里插入图片描述

1、鸿蒙技术细节:微内核架构

由于鸿蒙是微内核架构,我们来着重关注一下微内核架构的组成。

微内核架构包含两类组件:核心系统和插件模块。核心系统负责通用功能,不因为业务的变化而变化;插件模块负责实现具体的业务,可以根据业务的变化而改动和扩展。

微内核架构模式可以将其他应用程序的功能作为插件添加到核心应用程序,从而提供应用的可扩展性、功能分离性和独立性。

在这里插入图片描述

微内核架构通常具有以下特征:

  • 整体敏捷度高。整体敏捷度是对不断变化的环境做出快速响应的能力。通过松散耦合的插件模块,可以很大程度上隔离并快速实现更改。
  • 易部署。根据模式的实现方式,可以在运行时将插件模块动态添加到核心系统,从而最大程度减少部署期间的停机时间。
  • 可测性高。插件模块可以单独进行测试,并且可以由核心系统轻松模拟,以演示或原始化特定功能,而对核心系统的更改很少或没有更改。
  • 功能表现优秀。虽然微内核架构模式无法自然地适用于高性能应用程序,但大多数使用微内核架构模式构建的应用程序都表现良好,因为可以自定义和简化应用程序以包含仅仅所需的功能。
  • 可扩展性强。根据实现插件模块方式,可以在插件功能级别提供可扩展性。不易开发。微内核架构需要周全的设计和协议治理,实施相当复杂。

2、鸿蒙OS结构细节

内核层:内核层包含内核子系统和驱动子系统。鸿蒙OS具有多个内核,针对不同的设备可以选择不同的内核,通过内核抽象层可以将底层的不同内核之间的差异屏蔽,并对上层提供统一的接口。驱动子系统负责提供统一的外设访问接口,以及负责驱动开发和管理框架。

系统服务层:该层包括四个子系统集

系统基本能力子系统集可以使分布式应用在多设备上运行、调度和迁移。
基础软件服务子系统集可以提供基础的通用软件服务。
增强软件服务子系统集可以针对不同的设备提供差异化的软件服务。
硬件服务子系统集提供硬件服务,如位置定位、指纹设别等。根据部署环境的不同,除基本能力子系统集以外的子系统集内部可以进行剪裁。
应用层:该层包括系统应用和第三方开发的非系统应用。

框架层:该层提供了Ability框架、UI框架和用户程序框架等。

在这里插入图片描述

3、方舟编译器

微内核和方舟编译器是鸿蒙系统中的两大核心。方舟编译器可以方便安卓APP移植到鸿蒙系统。

方舟编译器是华为自主研发的编译器平台,它将以前边解释边执行的低效运行方式转变为将Java、C、C++等代码一次编译成机器码的高效运行方式,同时也实现了多语言的统一。

华为官方数据说,方舟编译器能提升24%的操作系统流畅度、44%的系统响应能力和60%的三方应用操作流畅度。当然具体编译器是不是如官方说的那样流畅还是得实践检验的。

鸿蒙开发的三种方式

对于我们这些普通的程序员来说,鸿蒙系统发布并不会给公司带来增量的客户和业绩增长,但是对于公司和团队来说鸿蒙系统的迁移和搭建必然是一笔巨大的投入。现阶段团队都在寻求快速搭建一个鸿蒙APP 的方案。 目前我们团队调研了三种开发模式:

1、使用ArkTS声明式;

2、前端HTML+CSS+JS的方式,类似vue+小程序的混合语法;

3、拖拖拽拽低代码的形式创建页面或应用。

在上周的会议上,我们预计会选择第二种方案。因为无论在什么操作系统平台、什么技术体系下,HTML5及其延伸技术:例如FinClip小程序技术,永远是兼容性最好、开放程度最高、敏捷性最强的选择。在很多企业服务场景、企业IT现实条件下,也是更好的选择,例如比Flutter更容易掌握、运行风险更低、稳定性更强,同时也可以与Flutter或其他操作系统原生技术融合。下周有时间单独开一篇讲讲这三种鸿蒙开发模式。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS鸿蒙学习笔记(23)监听Wifi状态变化

监听Wifi状态变化 前言创建接收状态变化的Bean对象创建订阅者和订阅事件参考资料: 前言 本篇博文通过动态订阅公共事件来说明怎么使用HarmonyOS监听Wifi状态的变化。关于动态订阅公共事件的概念,官网有详细说明,再次就不在赘述。博文相关项目…

[GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备

基于labelme的无人机语义分割数据集制备 文章目录 基于labelme的无人机语义分割数据集制备1. 数据获取2. 安装labelme3.利用labelme进行标注 1. 数据获取 数据集制备需要利用无人机飞行并采集标注。使用录制模式,镜头垂直向下进行拍摄,得到DJI_XXXX.MP4…

研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结 前言 见《研发日记,Matlab/Simulink避坑指南(一)——Data Store Memory模块执行时序Bug》 见《研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》 见《…

32人联机自建服务器攻略【幻兽帕鲁多人游玩】

创建幻兽帕鲁服务器1分钟部署教程,阿里云和腾讯云均推出幻兽帕鲁服务器服务器和部署教程,4核16G和4核32G配置可选,阿腾云atengyun.com分享1分钟自建幻兽帕鲁Palworld服务器教程: 幻兽帕鲁服务器创建教程 幻兽帕鲁服务器官方推荐…

使用 Redis 的 List 数据结构实现分页查询的思路

假设有一个存储数据的 List,每个元素代表一个记录,例如 recordsList。 按页存储数据: 每页存储一定数量的记录。例如,第一页存储索引 0 到 N-1 的记录,第二页存储索引 N 到 2N-1 的记录,以此类推。 分页查…

书生·浦语大模型--第六节课笔记作业--OpenCompass大模型评测

文章目录 OpenCompass评测框架实战&基础作业安装查看支持的数据集和模型启动评测 为什么需要评测? 统一的模型评测 如何评测? 基座模型需要加上额外的提示 客观评测:只要回答包括北京就可以认为正确 主观评测:创作类问题。人工…

golang视角下 protobuf 的安装 从proto文件到go文件

Protocol Buffers(protobuf)是一种由Google开发的轻量级、高效的数据序列化格式。它设计的目的是为了在不同系统之间进行数据交换,同时保持数据的结构化和高效传输。以下是一些关键特点: 二进制格式: Protobuf 使用二…

设计模式_访问者模式_Visitor

案例引入 要求 测评系统需求:将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(比如 成功、失败 等) 传统方案 Man和Woman里面都有“成功”、“失败”的方法 【分析】 如果系统比较小&…

springboot优雅停机

import org.springframework.context.annotation.Configuration;import javax.annotation.PreDestroy;Configuration public class DataBackupConfig {PreDestroypublic void backData(){System.out.println("开始备份..."System.currentTimeMillis());System.out.pr…

6.Toast(Android)

愿你出走半生,归来仍是少年! 环境:.NET 7、MAUI 在Maui开发中使用的Toast太丑了,在android项目中使用时不够看。通过Maui的安卓绑定库可实现将android中已有的包导入到C#项目中使用,借助这个方法就可以使用以前在android原生开发…

Python_NumPy——入门学习(概述,数据类型,创建数组)

作者:初次知晓 邮箱:lr_1052107892outlook.com 资料参考 [菜鸟教程](https://www.runoob.com/)NumPy概述 NumPy(Numerical Python)是python的一个扩展程序库,支持大量的维度数据与矩阵运算,针对数据运算提供大量的数学函数库,包…

如何降低微服务复杂度丨云栖大会微服务主题分享实录

作者:谢吉宝 本文整理自阿里云资深技术专家、中间件负责人谢吉宝在2023云栖大会《极简微服务模式,降低微服务复杂度的最佳实践》的分享 2023 云栖大会现场 当面临复杂的挑战时,"分而治之"的方法往往能取得显著的效果。微服务架构…

C++——类型转换与特殊类设计

我们在C语言中经常会使用到强制类型转换,例如指针和整形之间的转换是最为常见的,但是 在C中,C设计师认为这种强制类型转换是不安全的,所以在C标准中加入了四种强制 类型转换风格,这就是我将要介绍的强制类型转换。 在某…

Stable Diffusion 长视频真人动画风格互转

Stable Diffusion Temporal-Kit和EbSynth 从娱乐到商用 1. Temporal Kit 和 EbSynth1.1 提取关键帧1.2 关键帧风格迁移1.3 生成序列帧2. 真人转卡通3. 卡通转真人4. 编辑技巧5. ControlNet + TemporalNet + 达芬奇Fusion6. Rerender A Video7. DiffSynth-Studio基于SD的风格化…

VS2022联合Qt5开发学习11(QT5.12.3联合VTK在VS2022上开发医学图像项目5——qvtkWidget上显示STL三维图像并取点)

这篇博文是接着这个系列前面的博文,来讲如何实现医学图像三视图同步视图。我想到的一个思路是用Scrollbar来控制切面的改变,还有一个想法是在三维图像上取点,然后以这个点为切面中心更新三维视图。这篇博文主要介绍的就是第二个想法的三维图像…

kotlin sum 与 sumOf

kotlin 中 sum 的作用: 计算一个列表里面数字的总和: val numbers listOf(1, 2, 3, 4, 5) val sum numbers.sum() println("The sum is: $sum") // 打印结果: The sum is: 15 kotlin中sumOf的作用: 也是计算一个列表里面数字…

C++ qt标题栏组件绘制

本博文源于笔者在学习C qt制作的标题栏组件,主要包含了,最小化,最大化,关闭。读者在看到这篇博文的时候,可以直接查看如何使用的,会使用了,然后进行复制粘贴源码部分即可。 问题来源 想要制作…

支持向量机(Support Vector Machines)(需要优化)

1.优化目标 一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support Vector Machine)。与逻辑回归和神经网络相比,支持向量机,或者简称 SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大…

Spring SpEL在Flink中的应用-与FlatMap结合实现数据动态计算

文章目录 前言一、POM依赖二、主函数代码示例三、RichFlatMapFunction实现总结 前言 SpEL表达式与Flink FlatMapFunction或MapFunction结合可以实现基于表达式的简单动态计算。有关SpEL表达式的使用请参考Spring SpEL在Flink中的应用-SpEL详解。 可以将计算表达式放入数据库&a…

RabbitMQ工作模式 - 简单模式和work工作模式多个竞争的消费者

RabbitMQ 是一个消息队列中间件,用于在分布式系统中进行消息传递。在 RabbitMQ 中,有几种工作模式,其中简单模式和工作模式是其中两种基本的模式之一。 简单模式(Simple Mode): 在简单模式中,有…