应用模型开发指南上新介绍
Module、HAP、Ability、AbilitySta-ge、Context……您是否曾经被这些搞不懂又绕不开的知识点困扰?
现在,全新的《应用程序包基础知识》及《应用模型开发指南》为您答疑解惑!
这里有您关注的概念解析、原理机制阐述,也有丰富的场景化开发指导,快来体验吧~
应用程序包基础知识:
一、基本概念解析
新版文档中的知识点,介绍更全面,逻辑更清晰,提供了各类基本概念解析,帮助开发者更快学习、掌握系统能力。以下是新版文档部分概念展示。
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 非首次启动两种启动指定页面的场景,以及在讲解启动指定页面之前会讲解到在调用方如何指定启动页面。
更多文档信息,请访问:
四、我们期待您的反馈
以上就是本期文档君为大家准备的 HarmonyOS 应用程序包基础知识及应用模型开发指南上新内容,希望能够帮助开发者更高效的探索、体验、上手 HarmonyOS。
同时,我们十分重视开发者的意见,欢迎各位开发者在 HarmonyOS 应用开发官网积极反馈意见,帮助我们持续提升文档体验。
我们将持续改进文档体验、丰富和完善内容,感谢各位开发者的支持及信赖,您的满意是我们持续提升文档体验的目标和动力。
敬请期待 HarmonyOS 开发者官方账号更多相关推送,获取最新文档和内容资源!
评论