HarmonyOS 应用模型开发指南介绍

一、基本概念解析

新版文档中的知识点,介绍更全面,逻辑更清晰,提供了各类基本概念解析,帮助开发者更快学习、掌握系统能力。以下是新版文档部分概念展示。

1、HAP是什么?

开发者通过DevEco Studio把应用程序编译为一个或者多个.hap后缀的文件,即HAP(Harmony Ability Package)。HAP是HarmonyOS应用安装的基本单位,包含了编译后的代码、资源、三方库及配置文件。HAP可分为Entry和Feature两种类型。

1)Entry类型的HAP:是应用的主模块,在module.json5中的type属性配置为entry类型。在同一个应用中,同一设备类型只支持一个Entry类型的HAP,通常用于实现应用的入口界面、入口图标、主特性功能等。

2)Feature类型的HAP:是应用的动态特性模块,在module.json5中的type属性配置为feature类型。一个应用程序包可以包含一个或多个Feature类型的HAP,也可以不包含;Feature类型的HAP通常用于实现应用的特性功能,可以配置成按需下载安装,也可以配置成随Entry类型的HAP一起下载安装(请参见module对象内部结构中的“deliveryWithInstall”)。

2、Module是什么?

在DevEco Studio工程目录中,一个HAP对应一个Module。

Module是指DevEco Studio工程中的功能单元。一个DevEco Studio工程可以包含多个Module,同时Module分为“Ability”、“Library”两种类型。此处的HAP对应“Ability”类型的Module;下文即将介绍的HAR(Harmony Ability Resources)包对应“Library”类型的Module。

3、Bundle是什么?

每个HarmonyOS应用可以包含多个.hap文件,这些.hap文件合在一起称为一个Bundle,每个应用都有一个BundleName。在每台设备上,已安装应用的BundleName是唯一的。需要特别说明的是:在应用上架到应用市场时,需要把应用包含的所有.hap文件(即Bundle)打包为一个.app后缀的文件用于上架,这个.app文件称为App Pack(Application Package),其中同时包含了描述App Pack属性的pack.info文件;但是,在云端分发和端侧安装时,都是以HAP为单位进行分发和安装的。

4、Ability组件概述

Ability组件是一种包含用户界面的应用组件,用于与用户交互。Ability组件是系统调度的基本单元,为应用提供绘制界面的窗口;一个Ability组件中可以通过多个页面来实现一个模块功能。

建议将不同模块功能拆解为不同的Ability组件单独实现,即将一个独立的功能模块放到一个Ability组件中,以多页面的形式呈现。每一个Ability组件实例,都对应于一个任务,可以在最近任务列表中呈现。

在开发态,一个Module可以包含一个或多个Ability组件,如下图所示。

Module与Ability组件关系示意图

二、原理机制解读

必要的原理、机制解读,让开发者“知其然,知其所以然”。

为让大家更好的理解系统工作原理,我们使用举例、图文结合等方式来详细解读原理机制。接下来,我们以Ability组件启动模式—specified为例进行介绍。

specified(指定实例模式),在Ability实例创建之前,允许开发者为该实例创建一个唯一的字符串Key,创建的Ability实例绑定Key之后,后续每次调用startAbility()方法时,都会询问应用使用哪个Key对应的Ability实例来响应startAbility请求。运行时由Ability内部业务决定是否创建多实例,如果匹配有该Ability实例的Key,则直接拉起与之绑定的Ability实例,否则创建一个新的Ability实例。

例如用户在应用中重复打开同一个文档时,启动的均是最近任务列表中的同一个任务。以及在应用中重复新建文档时,启动的均是最近任务列表中新的任务。这种情况下可以将Ability配置为specified(指定实例模式)。

指定实例模式演示效果

三、场景化开发指导

本次还补充/完善了20+个开发场景指导,只为让文档更贴近实际开发活动,助力开发者高效开发。以下为部分场景展示。

1、如何实现Ability组件与UI数据同步

本次按场景提供了具体的开发指导,主要包括:

使用EventHub进行数据通信:EventHub提供了Ability组件/ExtensionAbility组件级别的事件机制,以Ability组件/ExtensionAbility组件为中心提供了订阅、取消订阅和触发事件的数据通信能力。

使用globalThis进行数据同步:globalThis是ArkTS引擎实例内部的一个全局对象,引擎实例下的Ability/Page都可以使用,因此可以使用globalThis全局对象进行数据同步。

2、跨Ability组件跳转

详细的场景化开发指导,主要包括:

启动应用内的Ability:当一个应用内包含多个Ability时,存在应用内启动Ability的场景。

启动应用内的Ability并获取返回结果:在一个EntryAbility启动另外一个FuncAbility时,希望在被启动的FuncAbility完成相关业务后,能将结果返回给调用方。例如在应用中将入口功能和帐号登录功能分别设计为两个独立的Ability,在帐号登录Ability中完成登录操作后,需要将登录的结果返回给入口Ability。

启动其他应用的Ability:启动其他应用的Ability,通常用户只需要完成一个通用的操作(例如需要选择一个文档应用来查看某个文档的内容信息),推荐使用隐式Want启动。系统会根据调用方的want参数来识别和启动匹配到的应用Ability。

启动其他应用的Ability并获取返回结果:当使用隐式Want启动其他应用的Ability并希望获取返回结果时,调用方需要使用startAbility-ForResult()方法启动目标Ability。

启动Ability的指定页面:一个Ability可以对应多个页面,在不同的场景下启动该Ability时需要展示不同的页面,例如从一个Ability的页面中启动另外一个Ability时,希望启动该Ability的指定页面。本文主要讲解目标Ability首次启动和目标Ability非首次启动两种启动指定页面的场景,以及在讲解启动指定页面之前会讲解到在调用方如何指定启动页面。

为了能让大家更好的学习鸿蒙 (Harmony OS) 开发技术,这边特意整理了《鸿蒙 (Harmony OS)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙 (Harmony OS)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. 应用开发导读(Java)

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

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

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

相关文章

企企通相继出席首届百家新锐企业融通创新交流会与采购数字化创新沙龙,持续深化数字赋能

近期,企企通受邀分别参加了广州、上海业界重磅活动,针对新形势下企业数字化采购升级的新技术与新思路、产业链上下游协同发展等进行探讨,赋能数字化信息技术产业生态发展,并对各方主体如何协作共赢助推企业数字化发展建言献策。 0…

AMP State Evolution的计算:以伯努利先验为例

AMP State Evolution (SE)的计算 t 1 t1 t1时, E ( t ) E [ X 2 ] \mathcal E^{(t)} \mathbb E [X^2] E(t)E[X2],SE的迭代式为 τ r ( t ) σ 2 1 δ E ( t ) E ( t 1 ) E ∣ η ( t ) ( X Z ) − X ∣ 2 , Z ∼ N ( 0 , τ r ( t ) ) \begin{a…

JVM运行时数据区域、对象内存分配、内存溢出异常总结

深入理解java虚拟机第二章 二、运行时数据区域2.2.1 程序计数器2.2.2 Java虚拟机栈2.2.3 本地方法栈2.2.4 Java堆2.2.5 方法区2.2.6 运行时常量池2.2.7 直接内存 三、HotSpot虚拟机对象解密2.3.1 对象的创建对象如何分配内存?对象的创建如何处理并发问题&#xff1f…

vue3父子组件通过$parent与ref通信

父组件 <template><div><h1>ref与$parents父子组件通信 {{ parentMoney }}</h1><button click"handler">点击我子组件的值会减20</button><hr><child ref"children"></child></div> </te…

深度学习之图像分类(十五)DINAT: Dilated Neighborhood Attention Transformer详解(一)

Dilated Neighborhood Attention Transformer Abstract Transformers 迅速成为跨模态、领域和任务中应用最广泛的深度学习架构之一。在视觉领域&#xff0c;除了对普通Transformer的持续努力外&#xff0c;分层Transformer也因其性能和易于集成到现有框架中而受到重视。这些模…

GPIO的使用--操作PF09 PF10 PF08实现呼吸灯、跑马灯、警报闪烁灯

先来个呼吸灯演示 呼吸灯 目录 一、GPIO的介绍 1.含义 2.控制原理 3.控制流程 二、LED控制 1.呼吸灯 操作代码 烧录结果 2.蜂鸣器红绿灯交替 操作代码 3.红绿灯交替闪烁 操作代码 一、GPIO的介绍 1.含义 GPIO(general porpose intput output),通用输入输出端口。…

AI超级个体:ChatGPT与AIGC实战指南

目录 前言 一、ChatGPT在日常工作中的应用场景 1. 客户服务与支持 2. 内部沟通与协作 3. 创新与问题解决 二、巧用ChatGPT提升工作效率 1. 自动化工作流程 2. 信息整合与共享 3. 提高决策效率 三、巧用ChatGPT创造价值 1. 优化产品和服务 2. 提高员工满意度和留任率…

Slf4j使用Logback时,Logback如何初始化

前言 Slf4j SLF4J&#xff0c;全称 Simple Logging Facade for Java&#xff0c;是一个用于Java编程语言的日志系统抽象层。它为多种现有日志框架&#xff08;例如Log4j、java.util.logging等&#xff09;提供了统一的接口, 但自身并不实现日志功能。 SLF4J 允许用户在部署时…

ArkUI 如何将$r(’app.string.xxx‘) 转成string字符串

一、正常引用字符串资源文件内容 在 ArkUI 中&#xff0c;string.json 中的字符串资源正常情况下使用如下方式引用&#xff1a; Entry Component struct LoginPage {build() {Column() {Text($r(app.string.title))}}}二、资源转string类型 上面的代码没问题是因为 Text(con…

如何通过内网穿透实现公网远程ssh连接kali系统

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh远程连接kali 1…

销售流程中如何有效开发客户

在销售的海洋中&#xff0c;如何游刃有余地开发客户是一大关键。这需要深入了解你的目标客户&#xff0c;制定一份精细的销售计划&#xff0c;选择最合适的沟通方式&#xff0c;建立信任和信誉&#xff0c;并持续不断地跟进。 每一个潜在的客户都是一颗璀璨的星辰&#xff0c;…

【密码学引论】Hash密码

第六章 Hash密码 md4、md5、sha系列、SM3 定义&#xff1a;将任意长度的消息映射成固定长度消息的函数功能&#xff1a;确保数据的真实性和完整性&#xff0c;主要用于认证和数字签名Hash函数的安全性&#xff1a;单向性、抗若碰撞性、抗强碰撞性生日攻击&#xff1a;对于生日…

Ubuntu 设置Nginx开机自启

1.建立自启动服务文件 vim /usr/lib/systemd/system/nginx.service Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Typeforking ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx…

【libGDX】Mesh立方体贴图(6张图)

1 前言 本文通过一个立方体贴图的例子&#xff0c;讲解三维纹理贴图的应用&#xff0c;案例中使用 6 张不同的图片给立方体贴图&#xff0c;图片如下。 读者如果对 libGDX 不太熟悉&#xff0c;请回顾以下内容。 使用Mesh绘制三角形使用Mesh绘制矩形使用Mesh绘制圆形使用Mesh绘…

Current request is not a multipart request问题排查

概述 在应用工程里看到如下被标记为deprecated的代码&#xff0c;这对有代码洁癖的我而言是无法忍受的&#xff1a; row.getCell(10).setCellType(Cell.CELL_TYPE_STRING); String hospital row.getCell(0).getStringCellValue();对应的poi版本号&#xff1f;是的&#xff…

MySQL安装与配置教程

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

初刷leetcode题目(9)——数据结构与算法

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

Feign调用的两种方式

一、 先看一下项目结构 ply模块是主要的业务模块&#xff0c;upms是用户管理模块 他们都分为api和biz 其中api就是一些实体类&#xff0c;工具类&#xff0c;biz就是业务逻辑代码。 首先在upms-api中建立feign的文件夹&#xff0c;然后新建一个接口CustomApi CustomApi 然…

(Linux2.6内核)进程调度队列与切换

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 我们首先来了解几个概念 1. 进程在CPU上运行的时候&#xff0c;一定要运行完才行吗&#xff1f;答案是否定的&#xff0c;我们大部分的操作系统&#xff0c;主流就是分时操作系统&#xff0c;即基于时间片进程轮转执行的。 …

Nginx Openresty通过Lua+Redis 实现动态封禁IP

需求 为了封禁某些爬虫或者恶意用户对服务器的请求&#xff0c;我们需要建立一个动态的 IP 黑名单。对于黑名单中的 IP &#xff0c;我们将拒绝提供服务。并且可以设置封禁失效时间 环境准备 linux version: centos7 / ubuntu 等 redis version: 5.0.5 nginx version: nginx…