# 用户程序框架子系统 ## 简介 用户程序框架子系统包含两个大的模块:元能力子系统和包管理子系统。 **元能力子系统**,是OpenHarmony为开发者提供的一套开发OpenHarmony应用的开发框架。元能力子系统由如下模块组成: **图1** 元能力子系统框架图  Ability是应用所具备的能力的抽象,一个应用可以包含一个或多个Ability。Ability分为两种类型:FA(Feature Ability)和AA(Atomic Ability)。 - **FA**:由三方基于元能力框架开发的、实现单一功能的有UI界面的程序实体,用于支持与用户交互的能力。一个Page实例可以包含一组相关页面,每个页面用一个AbilitySlice实例表示。Page模板是Feature Ability唯一支持的模板。用户可以基于JavaScript语言开发FA,也可以基于C/C++语言开发FA。 - Page模板的Ability的生命周期流转图 **图2** Ability生命周期流转图 Page模板的Ability生命周期各状态解析 - **UNINITIALIZED**:未初始状态,为临时状态,Ability创建后会直接调用Init初始化,进入INITIAL状态; - **INITIAL**:初始化状态,也表示停止状态,表示当前Ability未运行,调用Start后进入INACTIVE,同时回调开发者的OnSatrt生命周期回调; - **INACTIVE**:未激活状态,表示当前窗口已显示但是无焦点状态,由于Window暂未支持焦点的概念,当前状态与ACTIVE一致。调用Active后进入ACTIVE,同时回调开发者的OnActive生命周期回调;调用Background后进入BACKGROUND,同时回调开发者的OnBackground生命周期回调; - **ACTIVE**:前台激活状态,表示当前窗口已显示,并获取焦点。调用Inactive后进入INACTIVE; - **BACKGROUND**: 后台状态,表示当前Ability退到后台。调用Active后进入ACTIVE,同时回调开发者的OnActive生命周期回调;调用Stop后进入INITIAL,同时回调开发者的OnStop生命周期回调; - **AbilitySlice** 一个使用Page模板的Ability由AbilitySlice构成,AbilitySlice是单个页面及其控制逻辑的总和。一个Page可以包含多个AbilitySlice,此时,这些页面提供的业务能力应当是高度相关的。Page模板的Ability与AbilitySlice的关系如下图: **图3 **Ability与AbilitySlice的关系图  - **AA**:由三方基于元能力框架开发的、实现单一功能的无UI界面的支持后台任务的程序实体。AA与FA的区别是,AA无UI界面。仅对系统服务有依赖关系,AA之间不存在依赖关系 。Service模板是AA支持的模板。 - **注册Ability** Ability的模板通过在清单文件中注册时指定。如下所示,开发者可以配置Ability元素的type属性,其取值page、service分别代表Page模板、Service模板。 ``` "module": { ...... "abilities": [ { "name": "default", "type": "pages", "label": "sdfasf" } ], ’ ...... } ``` - **AbilityKit**:元能力的开发框架,运行在开发者的应用程序进程中,和AbilityMs通过IPC通信,开发者基于该框架开发自己的Ability。 - **AbilityMs**:元能力运行管理服务,元能力生命周期的调度统一由AbilityMs管理。 - **AppSpawn:**进程孵化器,元能力进程由AppSpawn负责孵化并拉起。 **包管理子系统**,是OpenHarmony为开发者提供的安装包管理框架。包管理子系统的由如下模块组成: **图4** 包管理子系统框架图  - **包扫描器**:用来解析本地预制或者安装的安装包,提取里面的各种信息,供管理子模块进行管理,持久化 - **包安装子模块**:安装,卸载,升级一个包;Installed一个单独进程的用于创建删除安装目录,具有较高的权限。 - **包管理子模块**:管理安装包相关的信息 - **安全子模块**:签名检查、权限授予、权限管理 ## 目录 轻量用户程序框架子系统源代码目录结构如下图所示: **表 1** 轻量用户程序用户程序框架子系统源代码目录结构