HCIA-HarmonyOS Application Developer学习笔记

news2024/11/25 16:21:35

目录

  • 一、HarmonyOS 介绍
  • 二、HarmonyOS 应用开发流程
    • HarmonyOS 系统架构
    • HarmonyOS 子系统集
    • DevEco Studio
    • HarmonyOS 应用包结构
    • 使用资源文件的方法
    • 权限管理
    • 分布式能力
  • 三、Ability 设计与开发
    • Ability 的概念和分类
    • 页面生命周期
    • Intent载体
    • 页面间导航
    • Particle Ability 开发
  • 四、UI 页面设计与开发
    • Java UI 框架
    • JavaScript UI 框架
  • 五、任务派发方法
  • 六、任务分发器

一、HarmonyOS 介绍

HarmonyOS 是一款面向万物互联时代的、全新的分布式操作系统,它是一个全场景分布式智慧操作系统,覆盖了1+8+N全场景终端设备,其中手机是整个分布式能力的核心。
请添加图片描述

与原生Android 系统对比,HarmonyOS 不仅可以支持手机,还可以支持电脑、智慧屏、穿戴设备、智能家居、车机系统等等,从而形成一个全场景统一的操作系统。

通过多种分布式技术,整合不同终端硬件能力,形成一个虚拟的“超级终端”,应用开发者可基于该“超级终端”开发应用,聚焦上层业务逻辑,其优点是无需关注硬件差异;设备开发者可以按需调用其他终端能力,带来基于“超级终端”的创新服务体验。

二、HarmonyOS 应用开发流程

HarmonyOS 系统架构

HarmonyOS 整体以下至上可分为内核层系统服务层应用框架层应用层

其中系统服务层是HarmonyOS 的核心能力集合,通过框架层对应用程序提供服务,例如分布式数据管理、分布式任务调度、分布式软总线等都属于系统服务层,而例如Ability 框架属于应用框架层。另外,属于应用框架层的还有UI框架、用户程序框架等。

HarmonyOS 子系统集

HarmonyOS 的子系统集可分为以下:

子系统集
系统基本能力子系统集
基础软件服务子系统集
增强软件服务子系统集
硬件服务子系统集

1、常见的系统基本能力子系统集:UI框架、Ability框架、用户程序框架、分布式任务调度、分布式数据管理、分布式软总线等。

2、常见的基础软件服务子系统集:多媒体子系统、电话子系统、事件通知子系统等。

3、常见的增强软件服务子系统集:智慧屏专有业务子系统、穿戴专有业务子系统、IOT专有业务子系统等。

4、常见的硬件服务子系统集:位置服务子系统、生物特征识别服务子系统、穿戴专有硬件服务子系统、IOT专有硬件服务子系统等。

DevEco Studio

DevEco Studio是基于 IntelliJ IDEA Community 开源版本打造,面向华为终端全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等 E2E 的 HarmonyOS 应用开发服务,它支持JavaJavaScriptXMLHML(HarmonyOS Markup Language)C/C++CSS语言的代码开发和调试。

打开DevEco Studio,创建一个应用工程,可以在生成的基本应用包结构中,看到以下目录和文件:
在这里插入图片描述
在这里插入图片描述

使用DevEco Studio 工具进行应用开发时,支持预览器模拟器真机三种调测方式。

HarmonyOS 应用包结构

一个HarmonyOS 应用包结构主要包含APPHAP(HarmonyOS Ability Package),一个APP中可以包含多个HAP,是由逻辑代码资源文件第三方库应用配置文件组成的模块包,可分为EntryFeature 两种模块类型。

其中,Entry.hap 是应用程序的主要入口,而Feature.hap 是应用程序的其他部分,通常情况下,一种APP中只能有一个Entry.hap,pack.info 是描述该应用程序的相关内容,另外,在每个HAP的根目录下都存在一个config.json配置文件。
在这里插入图片描述
这里只介绍config.json 配置文件其中主要的三个部分:

HAP
app
deviceConfig
module

如下,可看到其中的代码:
在这里插入图片描述

  • app包含应用的全局配置信息,应用的包名称、版本号等等;deviceConfig包含应用在具体设备上的配置信息;module包含每个HAP包的配置信息,有每个Ability定义的基本属性,其中包含包名称、类名称以及该Ability提供的能力等等。

在这里插入图片描述

使用资源文件的方法

base 目录与限定词目录中的资源文件可以通过指定资源类型和资源名称来引用。
1、java 文件中引用 资源文件的格式:ResourceTable.type_name;
2、XML文件中引用资源文件的格式:$type:name;
3、rawfile 目录中的资源文件通过指定文件路径和文件名称来引用。

权限管理

应用权限需要在config.json 中使用“reqPermissions” 属性对需要的权限逐个进行声明,若没有在该文件中声明相关的权限,则应用将无法获得该权限的授权,另外,在应用中使用到的第三方库也涉及到权限使用,也需在config.json 中进行声明。

分布式能力

1、分布式软总线:是分布式能力的基础,为不同设备互联互通提供统一的分布式通信能力。
2、分布式文件服务:为用户不同设备中的应用程序提供文件共享的能力;
3、分布式数据服务:实现应用程序数据和用户数据的分布式管理。
4、分布式任务调度:支持对跨设备的应用进行远程启动、远程调用、远程连接以及迁移等操作;
5、分布式设备虚拟化:为用户不同设备之间进行资源融合、设备管理、数据处理,从而形成一个虚拟超级终端;

三、Ability 设计与开发

Ability 的概念和分类

Ability 是应用程序的主要组成部分,它可以分为Feature Ability(FA)Particle Ability(PA),FA支持Page 模板,用于提供与用户交互的能力;PA支持Service 模板Data 模板,Service模板用于提供后台运行任务的能力,Data模板用于对外部提供统一的数据访问接口。

Ability
Feature Ability
Page Ability
Particle Ability
Service Ability
Data Ability

一个Page Ability 可以由一个或多个AbilitySlice 组成,AbilitySlice 是指应用的单个页面以及控制逻辑的总和,另外不同的Page Ability 之间可以跳转,并且可以指定跳转到目标Page Ability 中某个具体的AbilitySlice。

Page Ability
AbilitySlice
AbilitySlice
......

页面生命周期

当用户进入、浏览、退出页面时,页面会有不同的状态,并回调不同的生命周期状态方法给外界,Page Ability 和AbilitySlice 具有类似的生命周期回调方法:
在这里插入图片描述
1、onStart()方法:当系统首次创建Page实例时,触发该回调;对于一个Page实例,该回调在其生命周期过程中只触发一次,然后该逻辑进入INACTIVE状态。
2、onActive()方法:Page会在进入INACTIVE状态后来到前台。然后系统调用该回调,逻辑会进入ACTIVE状态,该状态是应用与用户交互的状态,此时Page将保持在该状态,除非某类事件发生导致Page失去焦点,比如用户点击返回键或导航到其他Page。
3、onInActive()方法:Page失去焦点后,系统将调用该回调,然后Page进入INACTIVE状态。
4、onBackground()方法:Page将不再对用户可见,该回调通知开发者进行相应的资源释放,然后Page进入BACKGROUND状态。
5、onStop()方法:系统要销毁Page时,该回调通知开发者进行系统资源的释放。
6、onForeground()方法:处于该状态的Page仍然驻留在内存中,当重新回到前台时,系统将调用该回调。

Intent载体

Intent 是对象之间传递信息的载体,它由OperationParameters 元素构成。其中,Action 表示动作,可自定义Action;Entity 表示类别,也可以自定义;Uri 表示Uri 的相关描述,用于匹配Uri 的信息;Flags 表示处理Intent 的方式;BundleName 表示包描述;AbilityName 表示待启动的Ability名称;Deviceld 表示运行指定Ability的设备ID。

通过Intent 启动应用的过程是:构造包含BundleName 与AbilityName 的Operation对象,从而启动一个Ability ,并导航到该Ability。

页面间导航

1、在同一Page内导航,使用present()presentForResult() 方法实现同一Page内两个AbilitySlice 间的跳转。
2、在不同Page间导航,通过配置Intent 的Action,并使用startAbility()startAbilityForResult() 方法导航到目标Ability。获得返回结果的回调为onAbilityResult() ,在Ability 中调用setResult() 可以设置返回结果。

Particle Ability 开发

1、Service Ability:主要用于后台运行任务,它在主线程中执行,可由其他应用或Ability启动。在一个设备上,同一个Service只存在一个实例,即Service Ability是单实例的。

  • 启动Service。通过将Intent传递给startAbility()方法来启动Service,不仅支持启动本地Service,还支持启动远程Service。另外通过构造包含Deviceld(设备ID)、BundleName(包名称)、AbilityName(待启动的Ability名称)的Operation对象来设置目标Service信息。
  • 连接Service。如果Service需要与Page Ability或其他应用的Service Ability进行交互,则应创建用于连接的Connection,另外,Service还支持其他Ability通过connectAbility()方法进行连接。在使用connectAbility()处理回调时,需要传入目标Service的Intent与IAbilityConnection的实例,其中IAbilityConnection提供了两个方法供开发者实现,onAbilityConnectDone()用来处理连接的回调,onAbilityDisconnectDone()用来处理断开连接的回调。
  • 停止Service。Service一旦创建就会一直保持在后台运行,除非必须回收内存资源,否则系统不会停止或销毁Service。要手动停止Service,有以下方法:在Service中通过terminateAbility()停止本Service;在其他Ability调用stopAbility()来停止Service。

2、Data Ability:使用Data模板的Ability,对外提供一些增删改查以及文件操作等接口,其具体实现由开发者提供。Data的提供方和使用方都通过URl来标识一个具体的数据,它分为两种场景,跨设备场景需要额外制定DeviceID,而本地场景不需要。

四、UI 页面设计与开发

Java UI 框架

1、组件布局
Java UI框架中提供了一些标准布局功能的容器,继承自ComponentContainer,一般以"Layout”结尾,StackLayout 布局方式是堆叠(层叠)布局,视图以层叠的方式显示,默认情况下放到这块区域的左上角,第一个添加到布局中的视图显示在最底层,最后一个被放在最顶层;DependentLayout 布局方式可以指定相对于其他同级元素或相对于父组件的位置;DirectionalLayout 布局方式它用于将一组组件按照水平方向(horizontal)或者垂直方向(vertical)排布,子组件可以通过权重来按比例占用父组件的大小;TableLayout 布局方式以使用表格的方式划分子组件,如下图:
在这里插入图片描述
2、组件的分类
Java Ul框架的组件中,可以根据组件的功能从而分为布局类、交互类和显示类三种,布局类提供了不同布局规则的组件,交互类提供了在具体场景下与用户交互响应的功能,显示类提供了内容显示。

常用的组件有很多,例如,Text 是显示字符串的组件,定义后显示一块文本区域;TextField 是一种文本输入框组件;Button 是按钮组件,可以由文本、图标组成;Image 是显示图片的组件;ScrollView 是带滚动功能的组件,可以通过滚动显示更多内容。

JavaScript UI 框架

JavaScript UI 中基本组件主要有以下四类:

组件类型主要组件
基础组件text、image、progress、rating、span、marquee、image-animator、divider、search、menu、chart
容器组件div、list、list-item、stack、swiper、tabs、tab-bar、tab-content、list-item- group、refresh、dialog、grid-container
媒体组件video
画布组件canvas

五、任务派发方法

HarmonyOS 为开发者提供了同步派发任务、异步派发任务、异步延迟派发任务和成组派发任务四种任务派发方法。

TaskDispatcher 框架提供了以下几种主要的任务派发方法:
delayDispatch()异步延迟派发任务,异步执行,函数立即返回,内部会在延时指定时间后将任务派发到响应队列中;
syncDispatch()同步派发任务,派发任务并在当前线程等待任务执行完成,如果使用不当则会导致死锁;
asyncGroupDispatch()异步成组派发任务,且该组任务之间有一定的联系;
asyncDispatch()异步派发任务,派发任务,并立即返回,返回值是一个可用于取消任务的接口。

六、任务分发器

HarmonyOS为开发者提供了以下四种任务分发器:
TaskDispatcher具有多种实现,每种实现对应不同的任务分发器,可分为全局并发任务分发器(GlobalTaskDispatcher)并发任务分发器(ParallelTaskDispatcher)串行任务分发器(SerialTaskDispatcher)专有任务分发器(SpecTaskDispatcher)

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

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

相关文章

使用Vue脚手架2

ref属性 src/components/SchoolName.vue <template><div class"school"><h2>学校名称&#xff1a;{{name}}</h2><h2>学校地址&#xff1a;{{address}}</h2></div> </template><script>export default {name:…

【C++修炼之路】31.异常

每一个不曾起舞的日子都是对生命的辜负 异常 一.C语言传统的处理错误的方式二.C异常概念三.异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出3.3 异常安全3.4 异常规范 四.自定义异常体系五.C标准库的异常体系六.异常的优缺点 一.C语言传统的处理错误的方式 传统的错误处理机…

Idea运行springboot项目(保姆级教学)

**大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯…

PHP:对比数据库,隐藏不满足条件的标签;对比数据库,将标签中的内容更改为数据库中的对应项

一、查询数据库数据&#xff0c;A列数据如果等于前端div中的值&#xff0c;那么将div中的值给其赋值为对应数据库中B列的值 如下案例&#xff1a;以第一个为例&#xff0c;如果id为append1&#xff0c;并且此id等于满足条件的数据库中colum_name列中的append1&#xff0c;就将…

Windows安装 PostgreSQL数据库并进行简单数据操作

介绍&#xff1a; 在开发和管理数据库应用程序时&#xff0c;选择合适的数据库管理系统是至关重要的。PostgreSQL 是一个强大且广受欢迎的开源关系型数据库管理系统&#xff0c;它具有稳定性、可靠性和丰富的功能。本文将介绍如何在 Windows 操作系统上下载、安装 PostgreSQL&a…

6. QT环境下使用OPenCV(利用鼠标实现图像的ROI区域选择)

1. 说明 一张图像显示的内容可能并非所有的都是有用信息,有时需要选定某些区域做出特殊的处理。在OPenCV当中可以在图像上响应鼠标的操作,选取出图像上的特殊区域 — ROI区域。 效果展示: 2. 实现步骤 首先在QtCreator中创建一个新的widget项目,并配置好OPenCV的开发环…

【GIS】Python多线程转换NC格式文件为TIFF

汇总 【GIS】使用cdsapi下载ERA5和ERA5_land逐小时数据 NC格式介绍 说明 NC文件读取使用netCDF4,NC文件转换为TIF使用rasterio或者GDAL。 一些细节: 格点数据转换为TIFF文件时候,计算六参数时候,应该要考虑,格点数据存储的坐标属于栅格中心点的位置,转换为TIFF时候,…

Vue3中使用async-validator进行表单校验

官方文档&#xff1a;mirrors / yiminghe / async-validator GitCodevalidate form asynchronous &#x1f680; Github 镜像仓库 &#x1f680; 源项目地址 ⬇https://gitcode.net/mirrors/yiminghe/async-validator?utm_sourcecsdn_github_accelerator 注意&#xff1a;当…

19 | 为什么我只查一行的语句,也执行这么慢?

以下内容出自 《MySQL 实战 45 讲》 19 | 为什么我只查一行的语句&#xff0c;也执行这么慢&#xff1f; 第一类&#xff1a;查询长时间不返回 mysql> select * from t where id1;一般碰到这种情况。大概率是表 t 被锁住了。 分析&#xff1a; 首先执行 show processlis…

2023年全球性别差距调研 | 真正的“性别平等”如何实现?

尽管在推进性别平等方面做出了努力&#xff0c;但女性在许多方面仍然落后于男性--从房屋所有权到劳动力参与和董事会占比。虽然新冠疫情带来了前所未有的促进性别平等的政策&#xff0c;但它对结构性变化的影响却很小。 实际上&#xff0c;世界经济论坛估计还需要132年才能消除…

Luogu P1140.数的划分

P1140 数的划分 原题点这里 思路 这是一道动态规划的题目。 步骤主要分 5 5 5 步&#xff1a; 状态的定义转移式的推到递推顺序的判定边界的确定结果的输出 下面&#xff0c;我们针对这道题&#xff0c;细细地讲解一下每一个步骤 一、状态的定义 这道题的状态最简单&a…

面试题分析:统计网站访问次数

难度&#xff1a;较低 平台的访问量非常高&#xff0c;需要实时统计网站的访问次数&#xff0c;请设计一个计数器解决&#xff1a;初级工程师&#xff0c;可能回答使用synchronized锁或重入锁&#xff0c;进一步探讨&#xff0c;synchronized锁太重&#xff0c;有没其他方式&a…

redisson中Semaphore的信号量介绍及其原理

目录 1 基本介绍 1.1API介绍 1.2 示例 2 源码解析 2.1 Semaphore设置许可数量&#xff08;trySetPermits(int permits)&#xff09; 2.2 尝试获取许可&#xff08;boolean tryAcquire()&#xff09; 3 Lua脚本 3.1 加锁lua脚本 3.2 解锁lua脚本 1 基本介绍 Semaphore通…

科技资讯|苹果Vision Pro新专利曝光,与消除晕动症的技术有关

欧洲专利局发布了一份苹果专利&#xff0c;与消除 Apple Vision Pro 晕动病背后的一些工作有关。苹果通过推出新的 R1 处理器实现了这一目标&#xff0c;苹果专利提供了处理器背后的一些详细技术信息&#xff0c;在第 86 号专利点指出&#xff1a;" 在某些实施方案中&…

驾驭计算机视觉的翅膀:论文找代码的几种必杀技!

摘要 对于CVer来说&#xff0c;「代码和找代码」能力都是一种很重要的能力&#xff0c;毕竟idea再好只有通过代码实现出来才能发文章和刷榜。当我们阅读一篇高质量或者英文论文时&#xff0c;如何去找到该文章实现的代码&#xff0c;进而结合文章内容和代码实现去更好的理解作…

PoseiSwap 更新第二期空投,持有 Zepoch 节点数量将决定空投回报

Nautilus Chain 是行业内首个模块化 Layer3 架构链&#xff0c;开发者能够基于模块化进行定制化开发&#xff0c;并有望进一步推动 Web3 应用向隐私、合规等方向发展。当然&#xff0c;Nautilus Chain 的特殊之处还在于为生态用户带来丰厚的空投预期&#xff0c;据悉上线 Nauti…

基于matlab使用标记增强技术将虚拟内容呈现到现实场景中(附源码)

一、前言 此示例演示如何使用基于标记的增强现实将虚拟内容呈现到场景中。 增强现实 &#xff08;AR&#xff09; 通过自然混合真实和虚拟内容来增强现实世界的场景&#xff0c;从而创建新颖的应用程序。例如&#xff0c;增强现实应用程序可以添加虚拟标尺&#xff0c;使用户…

如何正确使用 ThreadLocal

1 前言 当多线程访问共享且可变的数据时&#xff0c;涉及到线程间同步的问题&#xff0c;并不是所有时候&#xff0c;都要用到共享数据&#xff0c;所以就需要ThreadLocal出场了。 ThreadLocal又称线程本地变量&#xff0c;使用其能够将数据封闭在各自的线程中&#xff0c;每…

数据管理成熟度评估DCMM之生产企业数据战略管理办法

生产企业数据战略管理办法 第一部分&#xff1a;导言 随着信息技术的快速发展和数据规模的急剧增长&#xff0c;生产企业越来越重视数据的价值和管理。有效的数据战略管理办法可以帮助生产企业更好地管理和利用数据资源&#xff0c;提高运营效率、决策质量和创新能力。本文将…

SpringMVC数据传递总结

文章目录 1. 分析总结2. 普通格式数据2.1 普通参数2.2 pojo参数2.3 嵌套pojo参数2.4 数组 -- 普通参数2.5 集合 -- 普通参数2.6 web容器添加过滤器指定字符集 3. JSON格式数据3.1 相关准备3.2 json数组(基本)3.3 json对象(pojo)3.4 json数组(pojo) 1. 分析总结 1.1 普通格式数据…