欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【鸿蒙HarmonyOS NEXT】UIAbility的生命周期

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

2024/11/30 12:48:27 来源:https://blog.csdn.net/sujiangming/article/details/142024381  浏览:    关键词:【鸿蒙HarmonyOS NEXT】UIAbility的生命周期

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

  • 一、环境说明
  • 二、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回调中,会触发获焦的事件回调,可以进行设置消息应用的背景颜色、高亮等操作。

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控制台上的日志,截图如下:
    在这里插入图片描述
    日志内容:

    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. 当在手机模拟器上鼠标向上滑动列出最近打开应用的列表后,找到我们的应用程序,如下截图所示:
    在这里插入图片描述
    然后点击截图上的删除按钮其删除,此时查看控制台日志,内容如下:

    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加入符合实际的业务代码呢?感兴趣的读者朋友可以尝试下在这些函数加上业务代码试试,看看这些函数是否可以正常运行呢?欢迎大家的留言,我们在留言区进行讨论。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com