HCIA-HarmonyOS Application Developer学习笔记

目录

  • 一、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.hqwc.cn/news/15504.html

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

相关文章

Java 动态规划 Licode面试题 08.01. 三步问题

代码展示&#xff1a; class Solution {int mod(int)1e97;public int waysToStep(int n) {//特殊情况处理if(n1||n2){return n;}if(n3){return 4;}//定义dp数组int[]dpnew int[n1];//初始化dp[1]1;dp[2]2;dp[3]4;for(int i4;i<n;i){dp[i]((dp[i-1]dp[i-2])%moddp[i-3])%mod…

git安装及初步使用

git的安装 &#xff1a; 在CentOS 7.6环境下可以使用一条语句就能安装git yum -y install git如果上面命令包以下错误&#xff0c;说明权限不够 [leijiefl ~]$ yum -y install git Loaded plugins: fastestmirror You need to be root to perform this command.可以转换成ro…

关于微服务治理的一些理解

关于微服务治理的一些理解 微服务架构存在的意义 根本意义 其主要目的还是为了解耦&#xff0c;提高灵活性和可扩展性&#xff01; 参考&#xff1a;https://zhuanlan.zhihu.com/p/462078779 相比单体 单体架构的性能高于微服务架构&#xff0c;微服务的负载能力低于单体架构…

【uniapp开发小程序】实现点击跳转手机通话 拨打电话功能

效果图&#xff1a; 代码展示&#xff1a; <template><view class"page-map"><view class"btn" click"telFun()" style"text-align: center;">电话咨询</view></view> </template> <script&g…

设计模式--------结构型模式

结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低&#xff0c;满足“合成复用原则”…

如何解决PostgreSQL执行语句长时间卡着不动,不报错也不执行的问题?

1 问题现象 执行SQL语句&#xff0c;卡着不动&#xff0c;不成功也不执行&#xff0c;就像挂住了一样。 truncate table simple; 2 原因分析 一般来说&#xff0c;语句呈现卡着的状态&#xff0c;主要会是两种原因比较多&#xff0c; 原因1&#xff1a;SQL语句是一个耗时操…

Yolov5-Lite + Sort算法实现边缘目标跟踪

文章目录 前言项目结构Sort算法实现卡尔曼跟踪器工具类多目标跟踪器 整合 前言 昨天挖了个坑&#xff0c;那么今天的话把坑填上&#xff0c;只要是实现Sort算法和Yolov5-Lite的一个整合。当然先前的话&#xff0c;我们在Yolov3–Tiny的时候&#xff0c;也做了一个&#xff0c;…

flutter 更新分支内容

有三个分支&#xff0c;主分支&#xff0c;A分支&#xff0c;B分支&#xff0c;别人在B分支开发了内容&#xff0c;我在A分支进行开发。别人在B分支提交了代码&#xff0c;让我去拉下来。这时候我就是需要切到B分支&#xff0c;拉代码下来&#xff0c;然后再回到A分支&#xff…

程序设计相关概念

计算机概念 计算机是根据指令操作数据的设备。具有功能性和可编程性的特点。 功能性&#xff1a;对数据的操作&#xff0c;表现为数据计算、输入输出处理和结果存储等。 可编程性&#xff1a;根据一系列指令自动地、可预测地、准确地完成操作者的意图。 计算机的发展 计算机…

Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE

Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE (visonOS 1 beta 已发布) 7 月 5 日&#xff08;北京时间今日凌晨&#xff09;已发布。 IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接&#xff1a;https://sysin.org/blog/apple-xcode-15/&#xf…

VSCode使用Remote SSH远程连接Linux服务器【远程开发】

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转载自cpolar极点云…

(02)Cartographer源码无死角解析-(78) ROS数据发布→子图内、子图间、约束与残差发布

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文…