【HarmonyOS】Stage 模型 - 基本概念

一、项目结构

如图1所示:
请添加图片描述

图1

从项目结构来看,这个应用的内部包含了一个子模块叫 entry,模块是应用的基本功能单元,它里面包含源代码、资源、配置文件等。

像这样的模块在应用内部可以创建很多。但模块整体来讲就分成两大类:

  • 第一类就像 entry 这样,它的内部其实是开发这个应用内的一些特殊能力的,像这样的模块,我们称之为 Ability Module,顾名思义就是能力模块。一个应用的内部它的能力有很多,我们就可以把不同的能力放到不同的模块里去开发。举个例子,支付宝,它的核心功能是支付,像我们熟悉的付款、转账等都属于是支付类的,这部分能力我们就可以把它们放到一个模块里。后来随着支付宝的发展,又增加了其他的能力,比如小程序、视频、看书等,这些能力相互之间都是独立的,所以它们也都可以放到独立的 Ability Module 里去开发。这样一来整个应用的能力就被清晰的划分出来,管理起来也非常的方便。

  • 第二类是在开发的过程肯定有一些通用的工具、资源、配置或者组件等,这些如果每一个模块都各自去开发显然是一种重复和浪费,所以我们就可以把这些通用的东西抽取起来,放到一个单独的模块里去,这样的模块我们称之为 Library Module,顾名思义就是一种共享依赖类型的模块。Ability 类型的 Module 就可以去引用 Library 类型的 Module。

如图2所示:
请添加图片描述

图2

二、项目编译、打包

源码将来肯定要去编译、打包,最终整个项目会被编译成一个 APP,也就是我们熟悉的那个安装包。只不过,在 Stage 模型里面,为了降低不同功能模块之间的耦合,事实上每一个模块都是可以去独立编译和运行的。所有的 Ability 类型的模块,将来就会被编译成 HAP 文件,而所有的 Library 类型的模块,则会被编译成 HSP 文件。所谓的 HAPHarmony Ability Package,也就是鸿蒙能力类型的包。而 HSP 则是 Harmony Shared Package,也就是鸿蒙共享类型的包。HAP 的包在运行的过程中就可以去引用和依赖 HSP 的包。

一个应用内部可能会包含多个不同的能力,就会分成很多的 Ability Module,因此往往就会有多个 HAP 的文件。但是,尽管都是 HAP 类型的文件,但是它们是有差异的,比如 entry 模块,entry 是项目的入口,在这个能力模块里面,主要开发的是项目入口界面等信息,还有就是整个项目或应用的主能力模块,也就是最核心的部分。剩下的一些特殊的能力模块,比如小程序、视频、看书等,这些能力模块,都是拓展功能。一个应用它的入口只能有一个,所以说如果我们的应用内部有很多的 HAP 文件,但是作为入口的 HAP 文件只有一个,那么这个 HAP 文件就叫 Entry 类型的 HAP,剩下的拓展功能就叫 Feature 类型的 HAP。所以,一个应用内部有且只有一个 Entry 类型的 HAP,但是 Feature 类型的 HAP 可以有多个。

HAP 有很多很多文件,将来最终要合并在一起。合并在一起之后称之为 Bundle。这个 Bundle 有一个自己的名字也就是 Bundle Name,这个 Name 可以理解成整个应用的唯一标识,将来整个 Bundle 最后合并打包会变成一个 APP。

如图3所示:
请添加图片描述

图3

之所以要采用这种多 HAP 文件打包模式,是因为:

  1. 降低不同模块之间的耦合,每个 HAP 都可以去独立编译和运行。
  2. 我们的应用在去下载安装时,可以选择性的安装,不是说一上来就把全部都安装好了,比如我们可以先安装它的核心模块 Entry,其它的 Feature 可以选择性安装。这样就可以降低应用安装时所占用的体积。

三、项目运行

每一个 HAP 都是可以独立运行的,而 HAP 在运行的时候,为了展示我们看到的界面和它的能力,都会创建一个名为 AbilityStage 的实例,我们称它为应用组件的“舞台”。为啥叫舞台呢?舞台肯定是在上面展示东西的,顾名思义展示的就是应用组件。

应用能力组件又有很多类型:

  • UIAbility:包含UI界面的应用组件,是系统调度的基本单元。
  • ExtensionAbility:拓展能力组件,例如在桌面展示的应用卡片等。

UIAbility 作为UI界面的组件,将来要展示UI界面,需要注意,它不是直接展示,首先会持有一个 WindowStage 的实例对象,WindowStage 跟 AbilityStage 类似,都是一个舞台,但是 WindowStage 是组件内窗口的舞台,也就是说UI组件内部先要有一个窗口(这个窗口是要展示在舞台上),所以 WindowStage 它的上面就会持有 Window 对象,也就是窗口,窗口里面展示我们的UI界面。因此这个 Window 就是用来绘制UI页面的窗口。

如图4所示:
请添加图片描述

图4

综上所述,Stage 模型采用的是舞台的机制,先来一个 AbilityStage(用来展示这些组件的舞台),然后在舞台上创建 Ability,这个组件将来要去渲染UI,它要持有一个窗口的舞台(WindowStage),在窗口的舞台上有一个窗口(Window),接着呢就可以在窗口里绘制页面。所以正是因为有很多很多的舞台,在舞台上展示东西,这种模型就被称之为 Stage 模型

为什么 Stage 模型要用这种舞台机制呢?正是由于存在这种舞台机制,Ability 和 Window 就分隔开,它们之间就解耦了,将来在开发跨设备的应用时,就可以针对不同的设备对于窗口进行单独的裁剪,去适应不同的设备。

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

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

相关文章

Docker基本操作 Linux里边操作

docker镜像操作命令: docker images:查看所有镜像; docker rmi:删除镜像 后边可以跟镜像的名字或者id指定要删除的镜像; docker pull:拉取镜像; docker push:推送镜像到服务; docker save :打包镜像 后边有用法; docker load:加载镜像&…

Centos/linux根目录扩容、分区、挂载。LVM、物理卷、逻辑卷

前言    (空格) :分区挂载和扩容是两码事 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量&a…

分布式版本控制系统——Git

分布式版本控制系统——Git 一、Git安装二、创建版本库三、将文件交给Git管理四、Git的工作区和暂存区1.工作区(Working Directory)2.版本库 五、版本回退和撤销修改1.版本回退2.撤销修改 六、删除文件七、常用基础命令总结八、参考 分布式版本控制系统&…

javaScript基础2

javaScript 一.运算符二.流程控制1.顺序流程控制2.分支流程控制(1)if/if..else/if多分支(2).三元表达式(4).switch和if else区别 3.循环流程控制(1).for循环/双重for循环(2).一些例子(3).while循环/do..whi…

python使用opencv对图像的基本操作(2)

13.对多个像素点进行操作,使用数组切片方式访问 img[i,:] img[j,:] #将第j行的数值赋值给第i行 img[-2,:]或img[-2] #倒数第二行 img[:,-1] #最后一列 img[50:100,50:100] #50-100行,50-100列(不包括第100行和第100列) img[:100…

进销存单机版和excel进销存那个好用

进销存单机版和EXCEL进销存哪个好用?单机版是安装在单台电脑上使用的,它不能像网络版一样可以多台电脑同时共享数据,所以进销存单机版有一个优势就是不需要连接网络也可以使用。 进销存单机版 进销存软件单机版是经过开发人员设计好的一种信…

目标检测与追踪AI算法模型及边缘计算智能分析网关V4的算法应用

目标检测与追踪是计算机视觉领域中的一个重要任务,主要用于识别图像或视频中的目标,并跟踪它们的运动轨迹。针对这一任务,有许多先进的AI算法模型,例如: YOLO(You Only Look Once):…

用例整体执行及pytest.ini文件

在我们写代码的过程中,一般都是右键或者命令行去执行一个用例 但是当我们写完后,需要整体执行一遍。那应该怎么搞呢? 我们可以在根目录下新建一个main.py或者run.py之类的文件,文件内容如下: if __name__ "__ma…

1、Qt简介

文章目录 前言一、pySide2 / pySide6 ,PyQt5 / PyQt6二、安装包1 安装pyside22 安装pyqt5三、从一个简单的例子开始三、界面动作处理---信号(signal)与槽(slot)(Qt最核心的机制)--- 绑定事件封装到类中总结前言 参考文章:Qt简介 本文开始就开始进入到qt的开发笔记书写…

以更多架构核心专利,推进 SDS 产业创新创造

今天是第 24 个世界知识产权日,今年世界知识产权日活动的主题是:“知识产权和可持续发展目标:立足创新创造,构建共同未来。” 这也正是 XSKY 在软件定义存储领域的目标之一。以“数据常青”为使命的 XSKY,始终立足于软…

Git -- 运用总结

文章目录 1. Git2. 基础/查阅2.1 基础/查阅 - git2.2 仓库 - remote2.3 清理 - rm/clean2.4 版本回退 - reset 3. 分支3.1 分支基础 - branch3.2 分支暂存更改 - stash3.3 分支切换 - checkout 4. 代码提交/拉取4.1 代码提交 - push4.2 代码拉取 - pull 1. Git 2. 基础/查阅 2…

使用JavaScript日历小部件和DHTMLX Gantt的应用场景(一)

DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件,这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用…