0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙Ability Kit(程序框架服务)【UIAbility组件生命周期】实例

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-05-31 15:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

UIAbility和自定义组件生命周期(ArkTS)

介绍

本文档主要描述了应用运行过程中UIAbility和自定义组件的生命周期。对于UIAbility,描述了Create、Foreground、Background、Destroy四种生命周期。对于页面和自定义组件描述了aboutToAppear、onPageShow、onPageHide、onBackPress、aboutToDisappear五种生命周期。

相关概念

  • [UIAbility]:UIAbility是包含UI界面的应用组件,提供组件创建、销毁、前后台切换等生命周期回调,同时也具备组件协同的能力。
  • [自定义组件的生命周期]:自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。
  • [窗口开发指导]:窗口模块用于在同一块物理屏幕上,提供多个应用界面显示、交互的机制。

环境搭建

软件要求

  • [DevEco Studio]版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 开发板类型:[润和RK3568开发板]。
  • OpenHarmony系统:3.2 Release。
  • 开发前请熟悉鸿蒙开发指导文档 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

环境搭建

完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:

  1. [获取OpenHarmony系统版本]:标准系统解决方案(二进制)。以3.2 Release版本为例:
  2. 搭建烧录环境。
    1. [完成DevEco Device Tool的安装]
    2. [完成RK3568开发板的烧录]
  3. 搭建开发环境。
    1. 开始前请参考[工具准备],完成DevEco Studio的安装和开发环境配置。
    2. 开发环境配置完成后,请参考[使用工程向导]创建工程(模板选择“Empty Ability”)。
    3. 工程创建完成后,选择使用[真机进行调测]。

代码结构解读

本篇Codelab只对核心代码进行讲解,对于完整代码,我们会在gitee中提供。

├──entry/src/main/ets                // 代码区
│  ├──common
│  │  ├──constants
│  │  │  └──CommonConstants.ets      // 公共常量类
│  │  └──util
│  │     └──Logger.ets               // 日志管理工具类
│  ├──entryability
│  │  └──EntryAbility.ts             // 程序入口类
│  └──pages
│     └──LifeCyclePage.ets           // 跳转页
└──entry/src/main/resources          // 资源文件目录

UIAbility生命周期

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

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

// EntryAbility.ts
import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';

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

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

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

// EntryAbility.ts
import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';

export default class EntryAbility extends UIAbility {
  ...
  onWindowStageCreate(windowStage: window.WindowStage): void {
    this.windowStage = windowStage;
    // 设置WindowStage事件订阅(获取/失焦、可见/不可见)
    try {
      windowStage.on('windowStageEvent', (data) = > {
        hilog.info(
          this.domain,
          'Succeeded in enabling the listener for window stage event changes. Data: %{public}',
          JSON.stringify(data) ?? ''
        );
      });
    } catch (exception) {
      hilog.error(
        this.domain,
        'Failed to enable the listener for window stage event changes. Cause: %{public}',
        JSON.stringify(exception) ?? ''
      );
    }
    // 设置UI加载
    windowStage.loadContent('pages/LifeCyclePage', (err, data) = > {
      ...
    });
  }
}

Foreground和Background状态

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

  • onForeground()回调,在UIAbility的UI界面可见之前,如UIAbility切换至前台时触发。可以在onForeground()回调中申请系统需要的资源,或者重新申请在onBackground()中释放的资源。
  • onBackground()回调,在UIAbility的UI界面完全不可见之后,如UIAbility切换至后台时触发。可以在onBackground()回调中释放UI界面不可见时无用的资源,或者在此回调中执行较为耗时的操作,例如状态保存等。

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

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

// EntryAbility.ts
import UIAbility from '@ohos.app.ability.UIAbility';

export default class EntryAbility extends UIAbility {
  ...
  onForeground(): void {
    // 申请系统所需的资源或在onBackground中申请释放的资源
  }

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

Destory状态

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

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

// EntryAbility.ts
import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';

export default class EntryAbility extends UIAbility {
  ...
  onDestroy(): void | Promise< void > {
    // 释放系统资源,保存数据
  }
}

自定义组件生命周期

自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。

说明:
HarmonyOS与OpenHarmony鸿蒙文档籽料:mau123789是v直接拿

  • 允许在生命周期函数中使用Promise和异步回调函数,比如网络资源获取,定时器设置等。

新文档.png
自定义组件的生命周期包括aboutToAppear、onPageShow、onPageHide、onBackPress、aboutToDisappear五种状态

  • aboutToAppear
    aboutToAppear?(): void
    aboutToAppear函数在创建自定义组件的新实例后,在执行其build()函数之前执行。允许在aboutToAppear函数中改变状态变量,更改将在后续执行build()函数中生效。
  • aboutToDisappear
    aboutToDisappear?(): void
    aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。
  • onPageShow
    onPageShow?(): void
    页面每次显示时触发一次,包括路由过程、应用进入前后台等场景,仅**@Entry**修饰的自定义组件生效。
  • onPageHide
    onPageHide?(): void
    页面每次隐藏时触发一次,包括路由过程、应用进入前后台等场景,仅**@Entry**修饰的自定义组件生效。
  • onBackPress
    onBackPress?(): void
    当用户点击返回按钮时触发,仅**@Entry**装饰的自定义组件生效。
    // LifeCyclePage.ets
    @Entry
    @Component
    struct LifeCyclePage {
      @State textColor: Color = Color.Black;
    
      aboutToAppear() {
        this.textColor = Color.Blue;
        Logger.info('[LifeCyclePage]  LifeCyclePage aboutToAppear');
      }
    
      onPageShow() {
        this.textColor = Color.Brown;
        Logger.info('[LifeCyclePage]  LifeCyclePage onPageShow');
      }
    
      onPageHide() {
        Logger.info('[LifeCyclePage]  LifeCyclePage onPageHide');
      }
    
      onBackPress() {
        this.textColor = Color.Red;
        Logger.info('[LifeCyclePage]  LifeCyclePage onBackPress');
        return false;
      }
    
      aboutToDisappear() {
        Logger.info('[LifeCyclePage]  LifeCyclePage aboutToDisappear');
      }
    
      build() {
        Column() {
          Text($r('app.string.hello_message'))
            .fontSize(CommonConstants.DEFAULT_FONT_SIZE)
            .fontColor(this.textColor)
            .margin(CommonConstants.DEFAULT_MARGIN)
            .fontWeight(FontWeight.Bold)
        }
        .width(CommonConstants.FULL_WIDTH)
      }
    }
    

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 框架
    +关注

    关注

    0

    文章

    404

    浏览量

    18314
  • 组件
    +关注

    关注

    1

    文章

    551

    浏览量

    18924
  • 鸿蒙
    +关注

    关注

    60

    文章

    2858

    浏览量

    45346
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【HarmonyOS 5】鸿蒙页面和组件生命周期函数

    【HarmonyOS 5】鸿蒙页面和组件生命周期函数 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:24 787次阅读

    【HarmonyOS 5】鸿蒙中的UIAbility详解(二)

    UIAbility的三种启动模式,数据如何传递,订阅UIAbility生命周期变化,订阅设备的信息变化进行讲解。 二、UIAbility的三种启动模式 singleton(单
    的头像 发表于 07-11 18:17 683次阅读
    【HarmonyOS 5】<b class='flag-5'>鸿蒙</b>中的<b class='flag-5'>UIAbility</b>详解(二)

    CYW20706的生命周期状态如何?

    CYW20706的生命周期状态如何? 我注意到CYW20706不再列在AIROC™ Bluetooth® LE& Bluetooth® 下。贸泽现在还将该器件列为不建议用于未来设计。 对于CYW20706来说,什么是好的更换零件。 还会有支持 LE Audio 的双栈蓝牙 SoC 吗?
    发表于 07-04 07:25

    关于生命周期中的aboutToAppear和onPageShow的理解和应用

    。 首先来看一下这两个生命周期的官方文档说明: aboutToAppear: aboutToAppear函数在创建自定义组件的新实例后,在执行其build()函数之前执行。允许在aboutToAppear
    发表于 06-30 17:32

    【HarmonyOS 5】鸿蒙中的UIAbility详解(三)

    【HarmonyOS 5】鸿蒙中的UIAbility详解(三) ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用
    的头像 发表于 06-14 22:32 478次阅读

    PageAbility切换为UIAbility的方法

    UIAbility。 将FA应用中PageAbility的代码迁移到新创建的UIAbility中。FA应用中PageAbility和Stage应用中的UIAbility生命周期基本一致
    发表于 06-05 06:07

    ArkUI-X中Plugin生命周期开发指南

    ArkUI-X插件用于拓展ArkUI应用的能力,提供管理插件生命周期的能力。本文主要介绍Android平台的ArkUI-X插件生命周期的使用。 Android平台创建ArkUI-X插件生命周期
    发表于 06-04 22:36

    ServiceAbility的生命周期介绍

    ServiceAbility的生命周期 开发者可以根据业务场景重写生命周期相关接口。ServiceAbility生命周期接口说明见下表。 表1 ServiceAbility生命周期
    发表于 05-28 08:22

    UIAbility组件生命周期介绍

    UIAbility组件生命周期 概述 当用户打开、切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换
    发表于 05-16 08:28

    UIAbility组件基本用法说明

    的启动页面 应用中的UIAbility在启动过程中,需要指定启动页面,否则应用启动后会因为没有默认加载页面而导致白屏。可以在UIAbility的onWindowStageCreate()生命周期回调中
    发表于 05-16 06:32

    UIAbility组件间交互(设备内)说明

    ;#039;);});})}} 在FuncAbility的onCreate()或者onNewWant()生命周期回调文件中接收EntryAbility传递过来的参数。 import UIAbility
    发表于 05-16 06:12

    UIAbility组件启动模式:实例在启动时的不同呈现状态

    的onAcceptWant()生命周期回调中,以获取该UIAbility实例的Key值。然后系统会自动匹配,如果存在与该UIAbility实例
    发表于 05-16 06:10

    UIAbility组件与UI的数据同步介绍

    数据通信 EventHub为UIAbility组件提供了事件机制,使它们能够进行订阅、取消订阅和触发事件等数据通信能力。 在基类Context中,提供了EventHub对象,可用于在UIAbility
    发表于 05-16 06:10

    KaihongOS操作系统:页面的生命周期介绍

    页面的生命周期 在KaihongOS中,学习页面的生命周期前需要先了解自定义组件。 1. 自定义组件(Component) 自定义组件
    发表于 04-25 08:18

    KaihongOS操作系统:UIAbility生命周期

    UIAbility生命周期 在KaihongOS中,EntryAbility.ets 是一个关键的文件,它定义了应用的入口Ability。以下是EntryAbility.ets中涉及的生命
    发表于 04-25 07:04