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

    文章

    397

    浏览量

    17290
  • 组件
    +关注

    关注

    1

    文章

    496

    浏览量

    17743
  • 鸿蒙
    +关注

    关注

    57

    文章

    2272

    浏览量

    42526
收藏 人收藏

    评论

    相关推荐

    鸿蒙开发Ability Kit程序框架服务:任务管理

    AbilityRecord:系统服务侧管理一个UIAbility实例的最小单元,对应一个应用侧的UIAbility组件
    的头像 发表于 06-24 14:46 289次阅读
    <b class='flag-5'>鸿蒙</b>开发<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>:任务管理

    鸿蒙开发组件:DataAbility的生命周期

    应用开发者可以根据业务场景实现data.js/data.ets中的生命周期相关接口。DataAbility生命周期接口说明见下表。
    的头像 发表于 06-20 09:39 289次阅读

    鸿蒙Ability Kit程序框架服务)【UIAbility组件启动模式】

    UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式:
    的头像 发表于 06-06 11:05 505次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>组件</b>启动模式】

    鸿蒙Ability Kit程序框架服务)【UIAbility组件基本用法】

    UIAbility组件的基本用法包括:指定UIAbility的启动页面以及获取UIAbility的上下文[UIAbilityContext]。
    的头像 发表于 06-06 11:02 324次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>组件</b>基本用法】

    鸿蒙Ability Kit程序框架服务)【UIAbility内和UIAbility间页面的跳转】

    基于Stage模型下的UIAbility开发,实现UIAbility内和UIAbility间页面的跳转。
    的头像 发表于 06-03 14:13 546次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【<b class='flag-5'>UIAbility</b>内和<b class='flag-5'>UIAbility</b>间页面的跳转】

    鸿蒙Ability Kit程序框架服务)【UIAbility组件与UI的数据同步】

    基于当前的应用模型,可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。
    的头像 发表于 06-03 10:26 358次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>组件</b>与UI的数据同步】

    鸿蒙Ability Kit程序框架服务)【UIAbility组件间交互(设备内)】

    UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,该UIAbility可以是应用内的其他UIAbility,也可以是其他应用的
    的头像 发表于 06-03 09:53 512次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>组件</b>间交互(设备内)】

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

    当用户打开、切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility
    的头像 发表于 05-30 21:51 1231次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>组件</b><b class='flag-5'>生命周期</b>】

    鸿蒙Ability Kit程序框架服务)【UIAbility组件概述】

    UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。
    的头像 发表于 05-30 20:17 298次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【<b class='flag-5'>UIAbility</b><b class='flag-5'>组件</b>概述】

    鸿蒙开发接口Ability框架:【AbilityDelegator】

    AbilityDelegator提供添加用于监视指定能力的生命周期状态更改的AbilityMonitor对象的能力,包括对AbilityMonitor实例的添加、删除、等待ability到达
    的头像 发表于 05-16 16:48 847次阅读
    <b class='flag-5'>鸿蒙</b>开发接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【AbilityDelegator】

    鸿蒙开发接口Ability框架:【(AbilityDelegator)】

    AbilityDelegator提供添加用于监视指定能力的生命周期状态更改的AbilityMonitor对象的能力,包括对AbilityMonitor实例的添加、删除、等待ability到达
    的头像 发表于 05-13 17:58 862次阅读
    <b class='flag-5'>鸿蒙</b>开发接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【(AbilityDelegator)】

    HarmonyOS开发案例:【UIAbility和自定义组件生命周期

    本文档主要描述了应用运行过程中UIAbility和自定义组件生命周期。对于UIAbility,描述了Create、Foreground、Background、Destroy四种
    的头像 发表于 05-10 15:31 945次阅读
    HarmonyOS开发案例:【<b class='flag-5'>UIAbility</b>和自定义<b class='flag-5'>组件</b><b class='flag-5'>生命周期</b>】

    鸿蒙开发-应用程序框架UIAbility的使用

    和进行页面刷新展示。 图4 Second页面带参数返回Index页面 UIAbility生命周期 当用户浏览、切换和返回到对应应用的时候,应用中的UIAbility实例会在其生命周期
    发表于 01-17 16:36

    鸿蒙Ability开发-Stage模型下Ability的创建和使用

    }的内容以过滤回显。 下面我们在EntryAbility中演示如何使用hilog对象打印Ability生命周期函数 onBackground。 此时我们点击商品列表中的商品,系统会打开商品详情页,承载商品
    发表于 01-08 15:34

    鸿蒙原生应用/元服务开发-Stage模型能力接口(九)上

    @ohos.app.ability.UIAbility (UIAbility) 一、说明 UIAbility是包含UI界面的应用组件,提供组件
    发表于 12-21 15:41