HarmonyOS NEXT鸿蒙开发:UIAbility组件(EntryAbility.ets)

介绍

官方指南

UIAbility组件是一种 包含 UI 的应用组件,主要用于 和用户交互

设计理念

  • 原生支持应用组件级的跨端迁移和多端协同。

  • 支持多设备和多窗口形态。

文件位置

创建工程后,自动生成 EntryAbility 文件,该文件就是UIAbility组件,在下面目录:

src/main/ets/entryability/EntryAbility.ets

源码

除了 onWindowStageCreate() 方法以外,其他都是空方法,只是打印日志

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  }

  onDestroy(): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
    });
  }

  onWindowStageDestroy(): void {
    // Main window is destroyed, release UI related resources
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }

  onForeground(): void {
    // Ability has brought to foreground
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  }

  onBackground(): void {
    // Ability has back to background
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }
}

生命周期

官网指南

官网API

当用户 打开切换返回 到应用时,应用中的 UIAbility 实例会在其 生命周期的不同状态之间转换

UIAbility类提供了一系列回调,通过这些回调可以知道某个状态发生改变,如:UIAbility实例的创建、销毁、前后台切换

状态

生命周期包括四个状态:

  • Create
  • Foreground
  • Background
  • Destroy

如下图:

在这里插入图片描述

Create状态

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

WindowStageCreate状态

UIAbility实例创建完成之后,在进入 Foreground 之前,系统会创建一个 WindowStage

WindowStage 创建完成后会进入 onWindowStageCreate() 回调,可以在该回调中设置 UI加载、设置WindowStage的事件订阅。

如上面源码中,通过下面代码自动加载 pages/Index.ets 页面

windowStage.loadContent('pages/Index' ...

WindowStageDestroy状态

在UIAbility实例销毁之前,则会先进入onWindowStageDestroy()回调

WindowStageCreate和WindowStageDestroy状态时序图

在这里插入图片描述

Foreground状态

Foreground 在UIAbility实例 切换至前台时触发 ,执行 onForeground() 回调

应用场景

切换至前台时触发,可以在 onForeground() 回调中 申请系统需要的资源

例如:应用在使用过程中需要使用 定位 时,可以在 onForeground() 回调中 开启定位 功能,从而获取到当前的位置信息。

Background状态

Background 状态在UIAbility实例 切换至后台时触发,执行 onBackground() 回调

应用场景

切换至后台时候触发,可以在 onBackground() 回调中 释放无用的资源,或者在此回调中 执行较为耗时的操作,例如状态保存等。

当应用切换到后台状态,可以在 onBackground() 回调中 停止定位功能,以节省系统的资源消耗。

Destroy状态

Destroy状态在UIAbility实例销毁时触发。可以在 onDestroy() 回调中进行 系统资源的释放数据的保存 等操作。

启动模式

一个应用可以包含 一个多个UIAbility组件

每一个UIAbility组件实例 都会在 任务列表中显示一个对应的任务

类似微信小程序,有的微信小程序,在任务列表中,可以看到微信任务、小程序任务,如下图:

在这里插入图片描述

如何选择单个、多个UIAbility组件

建议如下:

  • 如果开发者希望在 任务视图看到 一个任务,建议使用 一个UIAbility+多个页面 的方式,可以避免不必要的资源加载。

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

配置位置

module.json5的launchType标签中配置

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值