HarmonyOS4.0系统性深入开发01应用模型的构成要素

news2025/2/6 14:08:43

应用模型的构成要素

应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必备的组件和运行机制。有了应用模型,开发者可以基于一套统一的模型进行应用开发,使应用开发更简单、高效。

HarmonyOS应用模型的构成要素包括:

  1. 应用组件

    应用组件是应用的基本组成单位,是应用的运行入口。用户启动、使用和退出应用过程中,应用组件会在不同的状态间切换,这些状态称为应用组件的生命周期。应用组件提供生命周期的回调函数,开发者通过应用组件的生命周期回调感知应用的状态变化。应用开发者在编写应用时,首先需要编写的就是应用组件,同时还需编写应用组件的生命周期回调函数,并在应用配置文件中配置相关信息。这样,操作系统在运行期间通过配置文件创建应用组件的实例,并调度它的生命周期回调函数,从而执行开发者的代码。

  2. 应用进程模型

    应用进程模型定义应用进程的创建和销毁方式,以及进程间的通信方式。

  3. 应用线程模型

    应用线程模型定义应用进程内线程的创建和销毁方式、主线程和UI线程的创建方式、线程间的通信方式。

  4. 应用任务管理模型

    应用任务管理模型定义任务(Mission)的创建和销毁方式,以及任务与组件间的关系。HarmonyOS应用任务管理由系统应用负责,三方应用无需关注,下文不做具体介绍。

  5. 应用配置文件

    应用配置文件中包含应用配置信息、应用组件信息、权限信息、开发者自定义信息等,这些信息在编译构建、分发和运行阶段分别提供给编译工具、应用市场和操作系统使用。

应用模型解读

HarmonyOS应用模型概况

随着系统的演进发展,HarmonyOS先后提供了两种应用模型:

  • FA(Feature Ability)模型:HarmonyOS早期版本开始支持的模型,已经不再主推。
  • Stage模型:HarmonyOS 3.1 Developer Preview版本开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。

Stage模型之所以成为主推模型,源于其设计思想。Stage模型的设计基于如下出发点。

  1. 为复杂应用而设计

    • 多个应用组件共享同一个ArkTS引擎(运行ArkTS语言的虚拟机)实例,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。
    • 采用面向对象的开发方式,使得复杂应用代码可读性高、易维护性好、可扩展性强。
  2. 支持多设备和多窗口形态

    应用组件管理和窗口管理在架构层面解耦:

    • 便于系统对应用组件进行裁剪(无屏设备可裁剪窗口)。
    • 便于系统扩展窗口形态。
    • 在多设备(如桌面设备和移动设备)上,应用组件可使用同一套生命周期。
  3. 平衡应用能力和系统管控成本

    Stage模型重新定义应用能力的边界,平衡应用能力和系统管控成本。

    • 提供特定场景(如卡片、输入法)的应用组件,以便满足更多的使用场景。
    • 规范化后台进程管理:为保障用户体验,Stage模型对后台应用进程进行了有序治理,应用程序不能随意驻留在后台,同时应用后台行为受到严格管理,防止恶意应用行为。

通过对比认识FA模型与Stage模型

Stage模型与FA模型最大的区别在于:Stage模型中,多个应用组件共享同一个ArkTS引擎实例;而FA模型中,每个应用组件独享一个ArkTS引擎实例。因此在Stage模型中,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。Stage模型作为主推的应用模型,开发者通过它能够更加便利地开发出分布式场景下的复杂应用。

可通过如下对比表格了解两种模型的整体概况。

表1 FA模型与Stage模型差异概览

项 目FA模型Stage模型
应用组件1. 组件分类点击放大 - PageAbility组件:包含UI界面,提供展示UI的能力。详细介绍请参见PageAbility组件概述。- ServiceAbility组件:提供后台服务的能力,无UI界面。详细介绍请参见ServiceAbility组件概述。- DataAbility组件:提供数据分享的能力,无UI界面。详细介绍请参见DataAbility组件概述。2. 开发方式通过导出匿名对象、固定入口文件的方式指定应用组件。开发者无法进行派生,不利于扩展能力。1. 组件分类点击放大 - UIAbility组件:包含UI界面,提供展示UI的能力,主要用于和用户交互。详细介绍请参见UIAbility组件概述。- ExtensionAbility组件:提供特定场景(如卡片、输入法)的扩展能力,满足更多的使用场景。详细介绍请参见ExtensionAbility组件。2. 开发方式采用面向对象的方式,将应用组件以类接口的形式开放给开发者,可以进行派生,利于扩展能力。
进程模型有两类进程:1. 主进程2. 渲染进程详细介绍请参见进程模型。有三类进程:1. 主进程2. ExtensionAbility进程3. 渲染进程详细介绍请参见进程模型。
线程模型1. ArkTS引擎实例的创建一个进程可以运行多个应用组件实例,每个应用组件实例运行在一个单独的ArkTS引擎实例中。2. 线程模型每个ArkTS引擎实例都在一个单独线程(非主线程)上创建,主线程没有ArkTS引擎实例。3. 进程内对象共享:不支持。详细介绍请参见线程模型。1. ArkTS引擎实例的创建一个进程可以运行多个应用组件实例,所有应用组件实例共享一个ArkTS引擎实例。2. 线程模型ArkTS引擎实例在主线程上创建。3. 进程内对象共享:支持。详细介绍请参见线程模型。
应用配置文件使用config.json描述应用信息、HAP信息和应用组件信息。详细介绍请参见应用配置文件概述(FA模型)。使用app.json5描述应用信息,module.json5描述HAP信息、应用组件信息。详细介绍请参见应用配置文件概述(Stage模型)。

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

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

相关文章

flink使用sql-client-defaults.yml无效

希望在flink sql脚本启动时自动选择catalog,减少麻烦。于是乎配置sql-client-defaults.yaml: catalogs:- name: hive_catalogtype: icebergcatalog-type: hiveproperty-version: 1cache-enabled: trueuri: thrift://localhost:9083client: 5warehouse: …

什么是误差,什么是重构误差,误差与重构误差有什么区别?

重构误差 1.误差的概念2.重构误差的概念 1.误差的概念 在机器学习中,误差通常是指模型的输出与实际标签或者真实值之间的差异,通常用于评估模型的预测能力或者训练的优化过程。 2.重构误差的概念 重构误差是指通过学习到的模型来重新构建(或…

案例135:基于微信小程序的房屋租赁管理系统的设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

ArcGIS基础:便捷查看外业照片及识别举证照片方位角

打开工具:【地理标记照片转点】。 打开工具后,输入文件夹,并对相应的参数进行勾选。 右键,图层属性,打开【显示】,对【超链接】设置等参数进行勾选。 找到【符号系统】,点击【高级】&#xff…

关于外贸包裹的那些事

大早晨收到一个客户留言,询问能不能看一下他的货物包裹被送到了哪里,然后客户可以安排他的代理人联系去取包裹,我心里的第一感觉是难道包裹丢失了? 于是赶紧起来查看物流单号,单号显示早在半个多月前已经被他的国内代…

【数据结构】线段树算法总结(区间修改)

知识概览 线段树一般有5个操作: pushup:用子节点更新当前节点信息pushdown:把懒标记往下传build:初始化一棵树modify:修改一个区间query:查询一个区间 不带懒标记(支持单点修改)的线…

HarmonyOS构建第一个ArkTS应用(Stage模型)

构建第一个ArkTS应用(Stage模型) 创建ArkTS工程 若首次打开DevEco Studio,请点击Create Project创建工程。如果已经打开了一个工程,请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发…

从0开始学Git指令

从0开始学Git指令 因为网上的git文章优劣难评,大部分没有实操展示,所以打算自己从头整理一份完整的git实战教程,希望对大家能够起到帮助! 初始化一个Git仓库,使用git init命令。 添加文件到Git仓库,分两步…

小红书kos和kop有什么区别,营销玩法有哪些

相信熟悉媒介传播的朋友,对于kol和koc都不陌生。但随着平台的发展和市场的进步,又出现了kos和kop。那么小红书kos和kop有什么区别,营销玩法有哪些? 一、什么是kos和kop KOS,全称叫做Key Opinion Sales,意思…

做外贸多想一步,多走一步

最近在网上给小儿买了一个液晶画画板,自从告诉小儿已经购物需要耐心等待之后,几乎每天小儿要询问几遍,快递到哪里了? 好不容易盼到了,结果打开一看却是个坏的,虽然外包装是好的,但是明显这个快…

编码器脉冲信号测量2路DI高速计数器PNP/NPN转RS-485数据采集模块 YL150-485 标准Modbus RTU协议

特点: ● 编码器解码转换成标准Modbus RTU协议 ● 可用作编码器计数器或者转速测量 ● 支持编码器计数,可识别正反转 ● 也可以设置作为2路独立DI高速计数器 ● 计数值支持断电自动保存 ● DI输入支持PNP和NPN输入 ● 继电器和机械开关输入时可以…

配置MUX VLAN示例(接入层设备)

一、组网需求 在企业网络中,企业所有员工都可以访问企业的服务器。但对于企业来说,希望企业内部部分员工之间可以互相交流,而部分员工之间是隔离的,不能够互相访问。为了解决上述问题,可在连接终端的交换机上部署MUX …

​​​​​​​配置MUX VLAN示例(接入层设备)

组网需求 在企业网络中,企业所有员工都可以访问企业的服务器。但对于企业来说,希望企业内部部分员工之间可以互相交流,而部分员工之间是隔离的,不能够互相访问。 如图1所示,为了解决上述问题,可在连接终端…

Android Studio 实现音乐播放器

目录 一、引言 视频效果展示: 1.启动页效果 2.登录页效果 3.注册页效果 4.歌曲列表页效果 5.播放页效果 二、详细设计 1.登陆注册功能 2.音乐列表页面 2.音乐播放功能 三、源码获取 一、引言 Android初学者开发第一个完整的实例项目应该就属《音乐播放器…

keil 5 : Error: L6218E: Undefined symbol 问题解决方法小记

1.路径已添加但依旧包找不到定义的错误,这里找不到的是DFP包中的函数 2.点击Manage Run-Time Environment->打开Device->ATC Driver->勾选SPI(找到你未定义函数所在的DFP包中的模块) 3.编译后,点击Open definition会成功跳转到函数…

hex和rgb色值转换-色彩加深减淡

我们在做主题订制的时候,一般都会选一种主题色,该颜色以主题色为主导,颜色依次变浅,用于做主题色下的关联色统一,例如文字激活、激活的背景色、菜单背景色等 在项目中主题色的应用: 如果你在项目中允许用…

unity脚本API中OnCollisionEnter()、OnTriggerEnter()二者的区别

Unity中的OnCollisionEnter和OnTriggerEnter两个函数在日常的开发中很常见但也容易混淆,下面说一说两者的区别。 碰撞器(Collider)与触发器(Trigger)的概念 碰撞器(Collider)和触发器&#xff…

Gbase8c认证考试课后题

Gbase8c认证考试课后题 第一次练习 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 第九题 第十题 第十一题 第十二题 第十三题 第二次练习 第一题 第二题 第三题 第四题 第五题 第三次练习 第一题 第二题 第三题 第四题 第五题 第四次练习 第一题 第二题 第三…

Shell 脚本应用(三)

使用 for 循环语句 for语句的结构 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同 的命令序列,直到变量值用完退出循环。在这里,“取值列表”称为for语句的执行条件,其中包括多…

从零实现一套低代码(保姆级教程) --- 【3】实现Button组件和画布区的拖拽

摘要 目前是每天更新一篇, 因为我不止要写文章,这些代码也是我正在敲的。可能速度没有那么快,但是这个频率感觉还是可以的。 本篇是这个系列的第三篇,如果你是第一次看到这个文章,那你应该会对低代码有那么一丢丢兴趣…