HarmonyOS NEXT - Stage模型和UIAbility组件

145 阅读3分钟

Stage模型

Stage模型提供了AbilityStage、WindowStage等类作为应用组件和window窗口的“舞台”,其设计基于: 1.为复杂的应用而设计 2.原生支持应用组件级的跨端迁移和多端协同 3.支持多设备和多窗口形态 4.平衡应用能力和系统管控成本

工程目录结构:配置文件

基于Stage模型开发的应用项目中都存在一个应用级配置文件app.json5、以及一个或者多个模块级配置文件module.json5。

在这里插入图片描述

在这里插入图片描述

UIAbility组件

UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。 一个应用可以包含一个或多个UIAbility组件。

每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。 如果希望在任务视图看到一个任务,建议使用“一个UIAbility+多页面”的方式,可以避免不必要的资源加载。

如果希望在任务视图看到多个任务,或者需要同时开启多个窗口,可以使用多个UIAbility实现不同的功能。

例如实时通讯类应用中的语音视频通话和消息列表采用不用的UIAbility进行开发,既可以方便地切换任务窗口,又可实现应用的两个任务窗口在一个屏幕上分屏显示。

声明配置

正常使用UIAbility需要再module.json5配置文件的abilities标签中声明UIAbility的名称、入口、标签的等相关信息

{
  "module": {
    // ...
    "abilities": [
      {
        "name": "EntryAbility", // UIAbility组件的名称
        "srcEntry": "./ets/entryability/EntryAbility.ets", // UIAbility组件的代码路径
        "description": "$string:EntryAbility_desc", // UIAbility组件的描述信息
        "icon": "$media:icon", // UIAbility组件的图标
        "label": "$string:EntryAbility_label", // UIAbility组件的标签
        "startWindowIcon": "$media:icon", // UIAbility组件启动页面图标资源文件的索引
        "startWindowBackground": "$color:start_window_background", // UIAbility组件启动页面背景颜色资源文件的索引
        // ...
      }
    ]
  }
}

生命周期

CreateForegroundBackgroundDestroy四个状态

Create状态是在应用加载过程中UIAbility实例创建完成时触发,系统调用onCreate回调,可以在这个回调中进行应用初始化操作,例如变量定义、资源加载等,用于后续的UI展示。

Foreground状态是在UIAbility实例切换至前台时触发,onForeground回调在UIAbility的UI可见之前(即UIAbility切换至前台时)触发,可以在此回调中申请系统需要的资源,或者重新申请在onBackground中释放的资源。例如开启定位功能,获取定位信息。

Background状态是在UIAbility实例切换至后台时触发,onBackground回调在UIAbility的UI完全不可见之后(即UIAbility切换至后台时)触发,可以在此回调中释放UI不可见时的无用资源,或者执行较为耗时的操作,例如状态保存等。例如停止定位功能。

Destroy状态是用户从最近任务列表关闭任务时销毁当前的UIAbility实例时触发,onDestroy回调中可释放系统资源或者数据保存。

在这里插入图片描述

UIAbility内的页面创建

@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry,一个页面可以由一个或者多个自定义组件组成。

指定UIAbility的启动页面

在UIAbility的onWindowStageCreate()生命周期回调中通过windowStage对象的loadContent()方法设置启动页面

获取UIAbility的上下文信息

UIAbility类拥有自身的上下文信息,该信息为UIAbilityContext类的实例,可调用getContext接口获取当前页面关联的UIAbilityContext或ExtensionContext。