首页 > 其他分享 >OpenHarmony—UIAbility组件生命周期

OpenHarmony—UIAbility组件生命周期

时间:2024-02-16 14:22:05浏览次数:29  
标签:OpenHarmony 生命周期 windowStage UIAbility window UI import 回调

概述

当用户打开、切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,会经过UIAbility实例的创建和销毁,或者UIAbility实例发生了前后台的状态切换。

UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态,如下图所示。

图1 UIAbility生命周期状态

在这里插入图片描述

生命周期状态说明

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

import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    // 应用初始化
  }
  // ...
}

说明:
Want是对象间信息传递的载体,可以用于应用组件间的信息传递。

WindowStageCreate和WindowStageDestroy状态
UIAbility实例创建完成之后,在进入Foreground之前,系统会创建一个WindowStage。WindowStage创建完成后会进入onWindowStageCreate()回调,可以在该回调中设置UI加载、设置WindowStage的事件订阅。

图2 WindowStageCreate和WindowStageDestroy状态

在这里插入图片描述
在onWindowStageCreate()回调中通过loadContent()方法设置应用要加载的页面,并根据需要调用on('windowStageEvent')方法订阅WindowStage的事件(获焦/失焦、可见/不可见)。

import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';

export default class EntryAbility extends UIAbility {
  // ...

  onWindowStageCreate(windowStage: window.WindowStage) {
    // 设置WindowStage的事件订阅(获焦/失焦、可见/不可见)
    try {
      windowStage.on('windowStageEvent', (data) => {
        let stageEventType: window.WindowStageEventType = data;
        switch (stageEventType) {
          case window.WindowStageEventType.SHOWN: // 切到前台
            console.info('windowStage foreground.');
            break;
          case window.WindowStageEventType.ACTIVE: // 获焦状态
            console.info('windowStage active.');
            break;
          case window.WindowStageEventType.INACTIVE: // 失焦状态
            console.info('windowStage inactive.');
            break;
          case window.WindowStageEventType.HIDDEN: // 切到后台
            console.info('windowStage background.');
            break;
          default:
            break;
        }
      });
    } catch (exception) {
      console.error('Failed to enable the listener for window stage event changes. Cause:' +
      JSON.stringify(exception));
    }

    // 设置UI加载
    windowStage.loadContent('pages/Index', (err, data) => {
      // ...
    });
  }
}

对应于onWindowStageCreate()回调。在UIAbility实例销毁之前,则会先进入onWindowStageDestroy()回调,可以在该回调中释放UI资源。例如在onWindowStageDestroy()中注销获焦/失焦等WindowStage事件。

import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';
import { BusinessError } from '@ohos.base';

export default class EntryAbility extends UIAbility {
  windowStage: window.WindowStage | undefined = undefined;
  // ...

  onWindowStageCreate(windowStage: window.WindowStage) {
    this.windowStage = windowStage;
    // ...
  }

  onWindowStageDestroy() {
    // 释放UI资源
    // 例如在onWindowStageDestroy()中注销获焦/失焦等WindowStage事件
    try {
      if (this.windowStage) {
        this.windowStage.off('windowStageEvent');
      }
    } catch (err) {
      let code = (err as BusinessError).code;
      let message = (err as BusinessError).message;
      console.error(`Failed to disable the listener for windowStageEvent. Code is ${code}, message is ${message}`);
    };
  }
}

Foreground和Background状态

Foreground和Background状态分别在UIAbility实例切换至前台和切换至后台时触发,对应于onForeground()回调和onBackground()回调。

onForeground()回调,在UIAbility的UI可见之前,如UIAbility切换至前台时触发。可以在onForeground()回调中申请系统需要的资源,或者重新申请在onBackground()中释放的资源。

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

例如应用在使用过程中需要使用用户定位时,假设应用已获得用户的定位权限授权。在UI显示之前,可以在onForeground()回调中开启定位功能,从而获取到当前的位置信息。

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

import UIAbility from '@ohos.app.ability.UIAbility';

export default class EntryAbility extends UIAbility {
  // ...

  onForeground() {
    // 申请系统需要的资源,或者重新申请在onBackground()中释放的资源
  }

  onBackground() {
    // 释放UI不可见时无用的资源,或者在此回调中执行较为耗时的操作
    // 例如状态保存等
  }
}

Destroy状态

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

例如调用terminateSelf()方法停止当前UIAbility实例,从而完成UIAbility实例的销毁;或者用户使用最近任务列表关闭该UIAbility实例,完成UIAbility的销毁。

import UIAbility from '@ohos.app.ability.UIAbility';

export default class EntryAbility extends UIAbility {
  // ...

  onDestroy() {
    // 系统资源的释放、数据的保存等
  }
}

要想成为一名合格的鸿蒙高级开发工程师,以上知识点是必须要掌握的,除此之外,还需要掌握一些鸿蒙应用开发相关的一些技术

为了节省大家一些查找的时间,这边联合几位行业大佬,为大家准备了一份《鸿蒙全栈技术 实战项目驱动式教学》的学习导图,从入门到进阶再到南北向开发实战的一整套完整体系,想要学习了解更多鸿蒙开发的相关知识可以借鉴:https://docs.qq.com/doc/DZXB5WmVIVHRwS0pY
在这里插入图片描述
除了上面整理的思维导图以外,这里还特别整理的一份《鸿蒙 (Harmony OS)开发学习手册》给大家进行参考学习:

一、入门必看

1.应用开发导读(ArkTS)

2.……在这里插入图片描述
二、HarmonyOS 概念

1.系统定义

2.技术架构

3.技术特性

4.系统安全

5........
在这里插入图片描述
三、如何快速入门?https://docs.qq.com/doc/DZXB5WmVIVHRwS0pY

1.基本概念

2.构建第一个ArkTS应用

3.构建第一个JS应用

4.……
在这里插入图片描述
四、开发基础知识

1.应用基础知识

2.配置文件

3.应用数据管理

4.应用安全管理

5.应用隐私保护

6.三方应用调用管控机制

7.资源分类与访问

8.学习ArkTS语言

9.……在这里插入图片描述
五、基于ArkTS 开发

1.Ability开发

2.UI开发

3.公共事件与通知

4.窗口管理

5.媒体

6.安全

7.网络与链接

8.电话服务

9.数据管理

10.后台任务(Background Task)管理

11.设备管理

12.设备使用信息统计

13.DFX

14.国际化开发

15.折叠屏系列

16.……

在这里插入图片描述
更多了解更多鸿蒙开发的相关知识可以参考:https://docs.qq.com/doc/DZXB5WmVIVHRwS0pY

标签:OpenHarmony,生命周期,windowStage,UIAbility,window,UI,import,回调
From: https://www.cnblogs.com/11usd/p/18017117

相关文章

  • [Kyana]开发OpenHarmony应用
    Javaver.HelloWorldconfig.jsonapp{bundleName:包名 vendor:开发厂商名(小贩) version:code(内部版本号),name(用户版本号)}deviceConfig{应用在设备上的配置}module{package:包名name:当前hap包名字mainAbility:hap包的入口abilitydeviceType:当前应用......
  • Spring MVC中控制器对象的生命周期
    一旦Controller控制器类向SpringMVC框架进行了注册,SpringMVC框架就会管理Controller对象的生命周期。 默认情况下,Controller对象的存在范围为singleton(单例),即在整个应用程序的生命周期内,一个Controller类只有一个实例。singleton范围的优点是节省内存空间,但是也存在以下两个......
  • delphi 主窗体的 生命周期,如何 自己管理 而不是 自动管理
    在Delphi中,窗体的生命周期通常是由VCL(VisualComponentLibrary)自动管理的。但是,你可以通过一些手段来自己管理主窗体的生命周期,而不是完全依赖于自动管理。要自己管理主窗体的生命周期,你可以考虑以下几个方面:创建窗体:你可以手动创建窗体实例,而不是依赖于Application.Cre......
  • 云图说|揭秘云原生服务生命周期治理平台,云原生服务中心OSC
    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 本文分享自华为云社区《【云图说】第301期初识云原生服务中心——云原生服务生命周期治理平台》,作者......
  • 云图说|揭秘云原生服务生命周期治理平台,云原生服务中心OSC
    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。​摘要:云原生服务中心(OSC)是面向服务提供商和服务使用者的云原生服务生命周期治理平台。本文分享......
  • harmonyOS基础(二)-简单认识UIAbility
    大家好!我是黑臂麒麟,一位6年的前端工程师;随着鸿蒙4.0的发布。鸿蒙的社区壮大,而且市场越来越对harmonyOS认可度越来越高。现很多大公司开始需要招聘鸿蒙应用开发工程师,待遇都非常好。以后中心厂跟进,也可以赶上红利;之前一直想入坑鸿蒙,但犹豫徘徊,2024不在等待,只争朝夕学,勇往直前。系统......
  • 软件产品生命周期模型定义
    ......
  • openharmony4.0 实现网络 app, 鸿蒙
    问题:拿到了开发者手机,但是再测试网络部分的时候出现问题。记录一下。 解决:需要再应用中对网络进行配置,便可以直接复制官方文档中的例子。 1官方文档的路径。https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-http.md......
  • OpenHarmony——4.1release代码走读——dsoftbus/core/discovery/coap
    这是dsoftbus/core/discovery/coap目录的结构.├──common│  ├──include│  │  └──disc_coap_parser.h│  └──src│  └──disc_coap_parser.c├──disc_coap.gni├──interface│  ├──disc_coap.h│  └──disc_......
  • 【Spring】- 生命周期回调
    【Bean初始化】官方使用建议:建议您不要使用InitializingBean接口,因为它不必要地将代码耦合到Spring。另外,我们建议使用@PostConstruct注解或指定POJO初始化方法。对于基于XML的配置元数据,可以使用init-method属性指定具有无效无参数签名的方法的名称spring:1.org.springf......