HarmonyOS Stage模型基本概念讲解

news/2024/7/21 11:05:11 标签: harmonyos, 华为

本文 我们来说harmonyos中的一种应用模型
Stage模型

官方提供了两种模型 一种是早期的 FA模型 另一种就是就是 harmonyos 3.1才开始的新增的一种模型 Stage模型

目前来讲 Stage 会成为现在乃至将来 长期推进的一种模型
也就是 无论是 现在的harmonyos 4.0 乃至 之后要发布的 harmonyos next 都会建议我们通过 Stage模型开发

本文呢 我们先来看一下Stage模型基本的一个概念
首先 我们项目里都会有一个 entry 子模块
在这里插入图片描述
模块是应用的基本单元
它里面就会包含源代码 还有一些资源 以及一些配置文件之类的
那其实想这样的模块 我们在一个应用中还可以创建很多很多

但模块基本来讲,还是就分成两大类
第一类就像我们 entry这样 用来开发我们应用的一些能力的
像这样的 我们就称作 Ability Module
顾名思义 能力模块
一个应用的内部它的能力有很多很多,我们就可以把不同的能力 放到不同的模块开发
比如 大家很熟悉的微信
在这里插入图片描述
一个社交类的应用 它的核心功能其实就是社交嘛

那其中 聊天啊 朋友圈啊 好友啊 其实这些都可以分成一个社交类
这部分能力就可以放到同一个模块中
那后来 随着微信的发展 它有出来了一些新的功能 例如小程序呀 视频号呀等等
这些能力相互之间也都是独立的
所以 他们也都可以放在独立的 Ability Module 里面去

这样一来 我们整个应用的能力就都清晰的划分出来了
管理起来也非常的方便

这些属于一类 Ability Module
这些过程当中呢 他们就会有一些通用的 工具 资源 或者组件等等
那如果这些模块,大家都各自去开发,显然是一种重复和浪费

所以 我们就可以把重用的东西抽取出来,放到一个单独的模块里去
这种模块我们就称作 Library Module
顾名思义 就是 一种共享的依赖模块

那么 他们之间 Ability Module 就可以去引用 Library Module

然后 我们回到编辑器
我们选择根目录右键 选择New 就可以看到 module 模块选项了
在这里插入图片描述
点击之后 我们这里就会有这种 module 的各种模板
在这里插入图片描述
其实这么多 无法就是分成 Ability和Library
在这里插入图片描述
那么 这就是Stage模型创建的一个基本的项目结构了

但这是源码 最后整个项目还是会被打包成一个安装包
只是在Stage模型中 为了降低不同模块之间的耦合 每一个模块都可以独立编译或运行的
那么之后所有Ability类型的模块,将来就会被编译成 .HAP 格式的文件
但我们一个App那肯定只能有一个入口呀,对不对?
那么 当我们有多个HAP文件时 那么就要设置一个入口文件 我们将它称之为 Entry 类型的HAP文件

其他就可以理解为一些拓展功能 叫 Feature类型的 HAP

简单说 一个项目只能有一个 Entry类型的HAP 因为你没办法给一个app多个入口,但是呢 可以有多个Feature 拓展功能可以一直往后加呀

最终 我们所有的HAP 肯定还是都要合并到一个app中的
合并到一起之后 我们称之为 Bundle
那么 我们可以设置一个 Bundle
Bundle 会有一个name属性 我们可以给它一个独立标识
最后 Bundle 合并在一起 就是一个app安装包

而且 最大的好处是 首先 Entry 肯定是要的 跑不掉 但其他模块 可以选择性的安装
这样 你就可以让应用没那么大 以及提高安装效率

首先,我们知道,每一个HAP都是可以独立运行的,它在运行时 为了展示我们的界面和一些逻辑
它都会创建一个 AbilityStage 实例 AbilityStage 在这里 被我们翻译为应用组件能力的舞台
这个舞台的意思就很明显了,应用展示自己能力的地方。

AbilityStage 最常见的就是
ExtensionAbility和UIAbility
UIAbility 它是 包含UI界面的应用组件,是系统调度的基本单元。

UIAbility内部会先有一个Windowstage 简单说 就是一个窗口 在这个窗口中展示我们的UI界面
在这里插入图片描述


http://www.niftyadmin.cn/n/5388714.html

相关文章

vue3组件间的通信,通过props,emit,provide和inject把数据传递N个层级,expose和ref实现父组件调用子组件方法

文章目录 一、父组件数据传递N个层级的子组件vue3 provide 与 injectA组件名称 app.vueB组件名称 provideB.vueC组件名称 provideCSetup.vue 二、使用v-model指令实现父子组件的双向绑定父组件名称 app.vue子组件名称 v-modelSetup.vue 三、父组件props向子组件传值子组件 prop…

力扣热题100_子串_560_和为 K 的子数组

文章目录 题目链接解题思路解题代码 题目链接 560.和为 K 的子数组 解题思路 1.定义变量count(计算个数,返回值)为0、n(当前nums长度)、preSums(利用利用defaultdict的特性,当presum-k不存在…

安装 Debian

安装 Debian 制作一个 Debian 的可启动 USB先决条件如何在 Linux 操作系统上制作 Debian 11 的可启动 USB第一步:附加 ISO 镜像第二步:选择 USB第三步:开始制作 USB 可启动的过程 如何在 Windows 上制作一个 Debian 11 可启动的 USB 盘第一步…

你已站在世界之巅——deepin深度国产操作系统果断入手

漂亮的设计、贴心的人机交互、安全友好的社区环境让您感觉宾至如归。——摘自深度首页。 1.为什么突然转身向国产系统? 微软win系统固然有广泛性,多年前也曾经使用过ubuntu等linux系统,但苦于大背景和软件环境,多数专业软件还是要…

WPF 限制输入只能为英文

WPF 限制输入只能为英文 有时输入只能让用户输入英文&#xff0c;那么如何设置输入只能英文&#xff1f; 方法一&#xff1a;在Xaml页面中直接限制文本输入框输入 <Windowxmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http:…

【C++11】lambda表达式 | 函数包装器

文章目录 一、lambda表达式1. 为什么需要lambda表达式2. lambda的定义3. lambda的语法捕捉列表 4. 函数对象和lambda表达式的底层原理 二、函数包装器1. function包装器2. bind包装器用bind包装器绑定固定参数用bind包装器调整传参顺序无意义的绑定 3. bind包装器的意义 一、la…

代码随想录算法训练营第五十四天| 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a;dp[i][1]&#xff0c;记录第一次买入股票&#xff1b;dp[i][2]&#xff0c;记录第一次卖出股票&#xff1b;dp[i][3]&#xff0c;第二次买入股票&#xff1b;d…

嵌入式学习-qt-Day4

嵌入式学习-qt-Day4 一、思维导图 二、作业 1.设计一个界面&#xff1a;显示系统时间&#xff1b;可以设置闹钟&#xff0c;在设置的时间到达后&#xff0c;显示五次字符串&#xff0c;并且语音播报。 Wight.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget>…