【鸿蒙HarmonyOS NEXT】UIAbility的生命周期

【鸿蒙HarmonyOS NEXT】UIAbility的生命周期

一、环境说明

  1. DevEco Studio 版本:

  2. API版本:以12为主

二、UIAbility的生命周期

概念: HarmonyOS中的UIAbility是一种包含用户界面的应用组件,主要用于与用户进行交互,并且是系统调度基本单元,为应用提供窗口在其中绘制界面

UIAbility是HarmonyOS系统中用于构建用户界面的基本组件之一,负责处理应用程序界面的显示和交互。

作用: 每个UIAbility实例都对应于一个最近任务列表中的任务,可以独立展示、交互和管理数据。一个应用可以包含一个或多个UIAbility,每个UIAbility可以对应多个页面,建议将独立的功能模块放到一个UIAbility中,以多页面的形式呈现。

UIAbility生命周期图

UIAbility的生命周期

包括Create、Foreground、Background、Destroy四个主要状态,以及WindowStageCreate和WindowStageDestroy两个与窗口管理相关的回调

Create状态:在UIAbility实例创建时触发,系统会调用onCreate回调。在此回调中,可以进行初始化操作,如变量定义、资源加载等。例如用户打开电池管理应用,在应用加载过程中,在UI页面可见之前,可以在onCreate回调中读取当前系统的电量情况,用于后续的UI页面展示。

WindowStageCreate状态 :在UIAbility实例创建完成之后,进入Foreground之前,系统会创建一个WindowStage。WindowStage是本地窗口管理器,用于管理窗口相关的内容,如获焦/失焦、可见/不可见等。可以在onWindowStageCreate回调中设置UI页面加载WindowStage的事件订阅。在onWindowStageCreate(windowStage)中通过loadContent接口设置应用要加载的页面。例如用户打开游戏应用,正在打游戏的时候,有一个消息通知,打开消息,消息会以弹窗的形式弹出在游戏应用的上方,此时,游戏应用就从获焦切换到了失焦状态,消息应用切换到了获焦状态。对于消息应用,在onWindowStageCreate回调中,会触发获焦的事件回调,可以进行设置消息应用的背景颜色、高亮等操作。

typescript 复制代码
import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';

export default class EntryAbility extends UIAbility {
    ...
    onWindowStageCreate(windowStage: window.WindowStage) {
        // 设置UI页面加载
        // 设置WindowStage的事件订阅(获焦/失焦、可见/不可见)
        ...
        windowStage.loadContent('pages/Index', (err, data) => {
            ...
        });
    }
    ...
}

Foreground状态: 在UIAbility的UI界面可见之前触发,对应于onForeground回调。可以在此回调中申请系统需要的资源,或者重新申请在Background状态中释放的资源。例如用户打开地图应用查看当前地理位置的时候,假设地图应用已获得用户的定位权限授权。在UI页面显示之前,可以在onForeground回调中打开定位功能,从而获取到当前的位置信息。

Background状态:在UIAbility的UI界面完全不可见之后触发,对应于onBackground回调。可以在此回调中释放UI界面不可见时无用的资源,或者执行较为耗时的操作,如状态保存等。当地图应用切换到后台状态,可以在onBackground回调中停止定位功能,以节省系统的资源消耗。

WindowStageDestroy状态:在UIAbility实例销毁之前触发,对应于onWindowStageDestroy回调。可以在此回调中释放UI页面资源,如注销在WindowStageCreate中设置的订阅事件。

Destroy状态:在UIAbility销毁时触发,可以在onDestroy回调中进行系统资源的释放、数据的保存等操作。例如用户使用应用的程序退出功能,会调用UIAbilityContext的terminalSelf()方法,从而完成UIAbility销毁。或者用户使用最近任务列表关闭该UIAbility实例时,也会完成UIAbility的销毁。

三、示例代码加以说明

沿用【鸿蒙HarmonyOS NEXT】页面之间相互传递参数博文中的代码,进行测试。

测试步骤如下:

  1. 打开模拟器,并将代码部署到模拟器上,当模拟器正常运行代码后,查看DevEco Studio控制台上的日志,截图如下:

    日志内容:

    shell 复制代码
    A03d00/JSAPP                    com.suben...arameter  I     Callee constructor is OK string
    A03d00/JSAPP                    com.suben...arameter  I     Ability::constructor callee is object [object Object]
    A00000/testTag                  com.suben...arameter  I     Ability onCreate
    A00000/testTag                  com.suben...arameter  I     Ability onWindowStageCreate
    A00000/testTag                  com.suben...arameter  I     Ability onForeground
    A00000/testTag                  com.suben...arameter  I     Succeeded in loading the content.
  2. 点击手机模拟器上应用的登录按钮,跳转到了首页,然后再从首页返回登录页,查看控制台日志,内容如截图橙色框所示:

    注意:上述代码是基于单UIAbility多页面开发的应用,因当前UIAbility仍处于前台的状态。

  3. 按住手机模拟器右边的圆形框返回手机模拟器屏幕,让该应用退到后台,再查看控制台日志的打印情况,具体如下:

    控制台日志截图如下:

    此时onBackground函数被调用。

  4. 当在手机模拟器上鼠标向上滑动列出最近打开应用的列表后,找到我们的应用程序,如下截图所示:

    然后点击截图上的删除按钮其删除,此时查看控制台日志,内容如下:

    shell 复制代码
    A00000/testTag                  com.suben...arameter  I     Ability onBackground
    A00000/testTag                  com.suben...arameter  I     Ability onWindowStageDestroy
    A00000/testTag                  com.suben...arameter  I     Ability onDestroy

    此时onBackground函数被调用。如截图所示:

四、小结

通过上述的说明和示例演示,相信大家已经很清楚UIAbility的生命周期了。细心的读者朋友可能会问,在真实的开发过程中该如何在这些诸如onCreate、onForeground、onBackground、onDestroy四个状态函数和两个窗口管理函数onWindowStageCreate和onWindowStageDestroy加入符合实际的业务代码呢?感兴趣的读者朋友可以尝试下在这些函数加上业务代码试试,看看这些函数是否可以正常运行呢?欢迎大家的留言,我们在留言区进行讨论。

相关推荐
幽蓝计划40 分钟前
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
开发语言·harmonyos
伍哥的传说1 小时前
鸿蒙系统(HarmonyOS)应用开发之实现电子签名效果
开发语言·前端·华为·harmonyos·鸿蒙·鸿蒙系统
Georgewu3 小时前
【HarmonyOS】应用开发拖拽功能详解
harmonyos
塞尔维亚大汉3 小时前
鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程
源码·harmonyos
kumalab6 小时前
HarmonyOS ArkTS卡片堆叠滑动组件实战与原理详解(含源码)
华为·harmonyos
别说我什么都不会7 小时前
【OpenHarmony】鸿蒙开发之xml2jsDemo
harmonyos
HarmonyOS_SDK10 小时前
HarmonyOS免密认证方案 助力应用登录安全升级
harmonyos
zhanshuo12 小时前
鸿蒙操作系统核心特性解析:从分布式架构到高效开发的全景技术图谱
harmonyos
塞尔维亚大汉12 小时前
鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程
源码·harmonyos
别说我什么都不会12 小时前
【OpenHarmony】鸿蒙开发之ohos_beacon_library
harmonyos