鸿蒙应用开发-初见:入门知识、应用模型

基础知识

Stage模型应用程序包结构

开发并打包完成后的App的程序包结构如图

  1. 开发者通过DevEco Studio把应用程序编译为一个或者多个.hap后缀的文件,即HAP
  2. 一个应用中的.hap文件合在一起称为一个Bundle,bundleName是应用的唯一标识

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

  1. 所有的HAP最终会编译到一个App Pack中(以.app为后缀的包文件),用于发布到应用市场

HAP

  1. HAP是HarmonyOS应用安装的基本单位,包含了编译后的代码、资源、三方库及配置文件
  2. 打包后的HAP包结构包括ets、libs、resources等文件夹和resources.index、module.json、pack.info等文件。
  • ets目录用于存放应用代码编译后的字节码文件
  • libs目录用于存放库文件。库文件是HarmonyOS应用依赖的第三方代码(.so二进制文件)。
  • resources目录用于存放应用的资源文件(字符串、图片等)
  • resources.index是资源索引表,由IDE编译工程时生成
  • module.json是HAP的配置文件,内容由工程配置中的module.json5和app.json5组成,该文件是HAP中必不可少的文件。

Entry类型的HAP
  1. 应用的主模块,在 module.json5配置文件中的type标签配置为“entry”类型。
  2. 同一个应用中,同一设备类型只支持一个Entry类型的HAP,通常用于实现应用的入口界面、入口图标、主特性功能等。
Feature类型的HAP
  1. 应用的动态特性模块,在 module.json5配置文件 中的type标签配置为“feature”类型。
  2. 一个应用程序包可以包含一个或多个Feature类型的HAP,也可以不包含;
  3. Feature类型的HAP通常用于实现应用的特性功能,可以配置成按需下载安装,也可以配置成随Entry类型的HAP一起下载安装

Module

  1. 一个开发态的Module编译后生成一个部署态的HAP,Module和HAP一一对应
  2. Module是HarmonyOS应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。一个DevEco Studio工程可以包含多个Module
  3. Module分为“Ability”和“Library”两种类型
  • “Ability”类型的Module对应于编译后的HAP(Harmony Ability Package);
  • “Library”类型的Module对应于 HAR 静态共享包(Harmony Archive),或者 HSP 动态共享包(Harmony Shared Package)

4. 一个Module可以包含一个或多个 UIAbility 组件

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

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

鸿蒙支持快速修复包

快速修复包结构

appqf(Application Quick Fix)
  1. appqf与应用的app pack包是一一对应关系
  2. appqf包是HarmonyOS应用用于发布到应用市场的单元,不能够直接安装到设备上
  3. 由一个或多个hqf组成,这些hqf包在应用市场会从appqf包中拆分出来,再被分发到具体的设备上
hqf(Harmony Ability Package Quick Fix)
  1. hqf包是修复HAP中问题的快速修复包,用于安装到设备上的快速修复单元
  2. 一个hqf可以包含.abc的快速修复文件,.so的快速修复文件和描述该包的配置文件
  • .abc文件:应用中修改后的ts代码,编译后生成的字节码文件
  • libs目录:存放.so库文件的差分文件,以.so.diff为后缀。区分的不同的系统cpu架构,例如arm平台、x86平台
  • patch.json:用于描述hqf包版本信息的配置文件,由开发者填写

快速修复包的发布部署流程

Stage模型

应用组件

AbilityStage组件容器
  1. AbilityStage是一个 Module 级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作
  2. AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage
  3. AbilityStage 拥有 onCreate()] 生命周期回调和 onAcceptWant() 、onConfigurationUpdated()、onMemoryLevel() 事件回调
onCreate() 生命周期回调
  1. 在开始加载对应Module的第一个UIAbility实例之前会先创建AbilityStage,并在AbilityStage创建完成之后执行其onCreate()生命周期回调
  2. AbilityStage模块提供在Module加载的时候,通知开发者,可以在此进行该Module的初始化(如资源预加载,线程创建等)能力
onAcceptWant()事件回调

UIAbility 指定实例模式(specified)启动时候触发的事件回调

onConfigurationUpdated()事件回调

系统全局配置发生变更时触发的事件,系统语言、深浅色等,配置项目前均定义在 Configuration 类中

onMemoryLevel() 事件回调

当系统调整内存时触发的事件

应用上下文Context
  1. Context 是应用中对象的上下文,其提供了应用的一些基础信息
  2. UIAbility组件和各种ExtensionAbility派生类组件都有各自不同的Context类。分别有基类Context、ApplicationContext、AbilityStageContext、UIAbilityContext、ExtensionContext、ServiceExtensionContext等Context

UIAbility组件
  • 包含UI界面,提供展示UI的能力,主要用于和用户交互。详细介绍请参见 UIAbility组件概述。
UIAbility组件生命周期

UIAbility组件启动模式
  • singleton(单实例模式)
  1. 每次调用startAbility()方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用系统中的UIAbility实例。
  2. 系统中只存在唯一一个该UIAbility实例,即在最近任务列表中只存在一个该类型的UIAbility实例
  3. 在 module.json5配置文件 中的"launchType"字段配置为"singleton"
  • standard(标准实例模式)
  1. 每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例
  2. 即在最近任务列表中可以看到有多个该类型的UIAbility实例
  3. 在 module.json5配置文件 中的"launchType"字段配置为"standard"
  • specified(指定实例模式)
  1. 在UIAbility实例创建之前,允许开发者为该实例创建一个唯一的字符串Key
  2. 创建的UIAbility实例绑定Key之后,后续每次调用startAbility()方法时,都会询问应用使用哪个Key对应的UIAbility实例来响应startAbility()请求。通过AbilityStage的onAcceptWant实现
  3. 运行时由UIAbility内部业务决定是否创建多实例,如果匹配有该UIAbility实例的Key,则直接拉起与之绑定的UIAbility实例,否则创建一个新的UIAbility实例
  4. module.json5配置文件 的"launchType"字段配置为"specified"
UIAbility组件与UI的数据同步

基于HarmonyOS的应用模型,可以通过以下两种方式来实现UIAbility组件与UI之间的数据同步

  1. EventHub:基于发布订阅模式来实现,事件需要先订阅后发布,订阅者收到消息后进行处理。
  • 在使用EventHub之前,首先需要获取EventHub对象。基类Context 提供了EventHub对象
  1. globalThis:ArkTS引擎实例内部的一个全局对象,在ArkTS引擎实例内部都能访问
UIAbility组件间交互(设备内)
  1. UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,该UIAbility可以是应用内的其他UIAbility,也可以是其他应用的UIAbility
  2. 通过调用startAbility并传递给它 want 参数启动其他UIAbility,如果期望其他Ability返回结果则可以使用startAbilityForResult
  • want中如果传入了abilityName则进行显示跳转,否则进行隐式跳转
ExtensionAbility组件

提供特定场景(如卡片、输入法)的扩展能力,满足更多的使用场景。详细介绍请参见 ExtensionAbility组件。

FormExtensionAbility :FORM类型的ExtensionAbility组件,用于提供服务卡片场景相关能力

ArkTS运行机制

进程模型

Stage模型有三类进程,是从系统总体资源占用考虑,希望由系统负责应用进程的创建和销毁。所以不支持应用自定义配置多进程,也不支持通过接口启动进程

主进程

开发者编写的UIAbility入口及其依赖的代码都在该进程中运行。它是由UIAbility组件的启动触发创建的。

ExtensionAbility进程

开发者编写的同一种类型的ExtensionAbility组件实例都会在同一个进程中运行。不同类型的ExtensionAbility组件实例则在不同的进程中运行。该类进程是由系统服务在特定场景下创建,并根据用户对特定场景的使用,决定其何时销毁。同时该类进程独立于主进程创建,并且不支持与主进程之间进行IPC通信

渲染进程

为了支持WebView的运行,每个应用只能创建一个Render进程用于运行WebView的渲染引擎。这个Render进程也是由系统负责创建和销毁

基于HarmonyOS的进程模型,系统提供了 公共事件机制 用于一对多的通信场景,公共事件发布者可能存在多个订阅者同时接收事件

线程模型

  1. ArkTS引擎实例的创建 一个进程可以运行多个应用组件实例,所有应用组件实例共享一个ArkTS引擎实例。
  2. 线程模型 ArkTS引擎实例在主线程上创建。
  3. 进程内支持对象共享

HarmonyOS应用中每个进程都会有一个主线程,主线程有如下职责:

  1. 执行UI绘制;
  2. 管理主线程的ArkTS引擎实例,使多个UIAbility组件能够运行在其之上;
  3. 管理其他线程(例如Worker线程)的ArkTS引擎实例,例如启动和终止其他线程;
  4. 分发交互事件;
  5. 处理应用代码的回调,包括事件处理和生命周期管理;
  6. 接收Worker线程发送的消息;

HarmonyOS可以使用Worker线程执行耗时操作,这些线程无法直接操作UI。Worker线程在主线程中创建,与主线程相互独立。最多可以创建8个Worker

线程间通信目前主要有Emitter和Worker两种方式,其中Emitter主要适用于线程间的事件同步, Worker主要用于新开一个线程执行耗时任务

Stage模型只提供了主线程和Worker线程,Emitter主要用于主线程内或者主线程和Worker线程的事件同步

应用配置文件

使用app.json5描述应用信息,module.json5描述HAP信息、应用组件信息

为了能让大家更好的学习鸿蒙 (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.hqwc.cn/news/225728.html

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

相关文章

SpringCloud 微服务全栈体系(十八)

第十一章 分布式搜索引擎 elasticsearch 八、RestClient 查询文档 文档的查询同样适用 RestHighLevelClient 对象,基本步骤包括: 准备 Request 对象准备请求参数发起请求解析响应 1. 快速入门 以 match_all 查询为例 1.1 发起查询请求 代码解读&…

出海企业客服服务大作战:打造卓越客户体验的六大法宝!

全球化的加速推进,使得越来越多的企业开始涉足国际市场,进行跨境业务拓展。在这个过程中,优质的客服服务成为了出海企业获取竞争优势和留住客户的关键。本文将探讨出海企业如何做好客服服务,并重点阐述客服系统在提升服务质量和效…

FFA 2023|字节跳动 7 项议题入选

Flink Forward 是由 Apache 官方授权的 Apache Flink 社区官方技术大会,作为最受 Apache Flink 社区开发者期盼的年度峰会之一,FFA 2023 将持续集结行业最佳实践以及 Flink 最新技术动态,是中国 Flink 开发者和使用者不可错过的的技术盛宴。 …

【Linux】探索进程的父与子

目录 1.获取进程PID1.1进程PPID 2.通过系统调用创建进程-fork初识2.1为什么fork函数要给子进程返回0,给父进程返回pid?fork函数如何做到返回两次的?fork干了什么事情?怎么理解一个变量为什么有两个不同的值?如果父子进…

1742. 盒子中小球的最大数量

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/maximum-number-of-balls-in-a-b…

附录11-math.h的常见方法

stdlib.h是做数学计算的头文件 目录 1 数学知识 1.1 弧度值/π 角度值/180 1.2 双曲函数 2 math.h 2.1 反余弦值 acos() 2.2 反正弦值 asin() 2.3 反正切值 atan() 2.4 两个数的反正切值 atan2() 2.5 向上取整 ceil() 2.6 余弦值 cos() 2.7 双曲余弦 c…

玻色量子对外合作

2023年 2023.7 首个央企量子云计算项目,中标! 2023.6 勇闯“量子电力”新领域,玻色量子与清大科越达成战略合作 2023.5 玻色量子签约移动云“五岳”量子云计算创新加速计划! 2023.3 “量子计算通信”!玻色量子与…

agv配置

要求前方避障停车距离1500m 货架旋转点要求遇障检测距离500m

my.ini添加了一句后又删除了,重启却失败的解决办法

背景:添加了一句,然后保存了,之后打开删掉了,结果就无法启动了,最后另存为ANSI格式,再把这个格式文件覆盖my.ini即可解决

创新、诚信、共赢:湖北乾一律师事务所领航律师行业新发展

湖北乾一律师事务所: 一、引言 律师行业在现代社会中扮演着举足轻重的角色,为公民、法人和其他组织提供法律服务,维护法律权益,促进法治建设。湖北乾一律师事务所作为业内的佼佼者,凭借其专业素养、丰富经验和卓越声誉,成为了律师行业的典范。 二、湖北乾一律师事务所概况 …

【Java】I/O流—File类:从0到1的全面解析

🎊专栏【Java】 🌺每日一句:看不清楚未来时,就比别人坚持久一点 ⭐欢迎并且感谢大家指出我的问题 目录 1.File概述 2.File构造方法 (1).根据文件路径创建文件对象 (2).根据父路径名字符串和子路径名字符串创建对象 (3).根据父路径对应文件对象和子路…

中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞)

中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞) WebLogic 是美国 Oracle 公司出品的一个 application server,确切的说是一个基于 JAVA EE 架构的中间件,WebLogic 是用于开发、集成、部署和管理大型分布式…