乐趣区

关于前端:OpenHarmonyUIAbility组件生命周期

概述

当用户关上、切换和返回到对应利用时,利用中的 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() {// 系统资源的开释、数据的保留等}
}

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

为了节俭大家一些查找的工夫,这边联结几位行业大佬,为大家筹备了一份《鸿蒙全栈技术 实战我的项目驱动式教学》的学习导图,从入门到进阶再到南北向开发实战的一整套残缺体系,想要学习理解更多鸿蒙开发的相干常识能够借鉴:《鸿蒙 4.0 源码开发架构剖析 pdf》

除了下面整顿的思维导图以外,这里还特地整顿的一份《鸿蒙 (Harmony OS)开发学习手册》给大家进行参考学习:

一、入门必看

1. 利用开发导读(ArkTS)

2.……
二、HarmonyOS 概念

1. 零碎定义

2. 技术架构

3. 技术个性

4. 系统安全

5……..

三、如何疾速入门?《一小时疾速意识 HarmonyOS》

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.……

更多理解更多鸿蒙开发的相干常识能够参考:《鸿蒙 HarmonyOS 分布式我的项目实战》

退出移动版