目录
五、Foreground 与 Background 状态的对比与关联
一、HarmonyOS UIAbility 组件初相识
在 HarmonyOS 的应用开发世界里,UIAbility 组件堪称基石般的存在,是构建应用用户界面和交互体验的关键角色。简单来说,UIAbility 是一种包含用户界面的应用组件 ,专门负责与用户进行交互。它就像是一座桥梁,连接着应用程序的功能逻辑与用户,让用户能够通过直观的界面操作来使用应用的各项功能。
想象一下,你日常使用的各种手机应用,无论是社交类的微信、购物类的淘宝,还是资讯类的今日头条,当你打开应用看到的登录界面、主功能界面,以及操作过程中弹出的各种交互窗口,这些能够直观看到和操作的部分,基本都是由 UIAbility 组件来呈现的。每个 UIAbility 组件实例,都对应着最近任务列表中的一个任务。这意味着,当你在多个应用之间切换时,其实就是在不同的 UIAbility 实例之间进行切换。一个应用可以包含一个或多个 UIAbility 组件 。比如,一个电商应用,可能将商品浏览功能放在一个 UIAbility 中,而将购物车和支付功能分别放在另外的 UIAbility 里。这样的设计,让应用的功能模块划分更加清晰,开发者可以根据不同的业务场景,灵活地组织和管理 UIAbility,从而为用户提供更流畅、高效的使用体验。
二、UIAbility 的生命周期全景图
UIAbility 的生命周期,就像是一部有序的 “状态变迁史”,涵盖了从组件诞生到消亡的全过程,包含 Create(创建)、Foreground(前台)、Background(后台)、Destroy(销毁)这四个关键状态 。当用户打开应用时,UIAbility 实例首先进入 Create 状态,此时系统会调用 onCreate () 回调,开发者可以在这个回调中进行一系列至关重要的初始化操作,比如定义变量、加载资源等,为后续的 UI 界面展示做好充分准备。就像搭建一座房子,Create 状态就是打地基、构建框架的阶段,只有基础稳固,后续的建设才能顺利进行。
在 Create 状态完成后,UIAbility 并不会直接进入前台展示,而是会经历一个中间环节 ——WindowStageCreate 状态。在这个状态下,系统会创建一个 WindowStage,它就像是一个承载 UI 界面的 “舞台”。当 WindowStage 创建完成,会进入 onWindowStageCreate () 回调,开发者可以在这里设置 UI 界面的加载,以及订阅 WindowStage 的各种事件,如获焦 / 失焦、可见 / 不可见等。这一步就像是在房子的框架内进行内部装修,布置各种设施,让房子变得更加舒适和实用。
完成上述准备工作后,UIAbility 才会进入 Foreground 状态,此时系统调用 onForeground () 回调,意味着 UIAbility 的 UI 界面即将可见,应用呈现在用户面前,开始与用户进行交互 。而当用户切换应用,UIAbility 的 UI 界面完全不可见之后,就会进入 Background 状态,触发 onBackground () 回调。这两个状态,即 Foreground 和 Background 状态,在 UIAbility 的生命周期中起着关键的桥梁作用,它们紧密关联着应用与用户的交互时刻,直接影响着用户体验。比如,当你在使用地图应用时,从打开地图查看位置,到中途切换到其他应用,地图应用的 UIAbility 就经历了从 Foreground 到 Background 的状态转变。在 Foreground 状态下,地图应用可以实时获取你的位置信息并展示在地图上;而进入 Background 状态后,为了节省系统资源,它可能会暂停一些不必要的功能,如停止实时定位更新 。
当应用不再被需要,比如用户关闭应用或者应用被系统强制销毁时,UIAbility 会进入 Destroy 状态,此时系统调用 onDestroy () 回调,开发者可以在此进行系统资源的释放、数据的保存等收尾工作,就像是房子不再使用时,要清理里面的物品,关闭水电等设施,为整个生命周期画上句号。
三、Foreground 状态:舞台中央的闪耀时刻
(一)状态定义与触发时机
Foreground 状态,可谓是 UIAbility 生命周期中的高光时刻。当 UIAbility 切换至前台,即将与用户进行面对面的交互时,就会进入这个状态。更准确地说,是在 UIAbility 的 UI 界面可见之前触发 。这就好比一场精彩演出,演员在幕布拉开前,已经做好了充分准备,即将闪亮登场。在这个关键时刻,系统会调用 onForeground () 回调函数,开发者可以在这个回调中,进行一系列与用户交互前的关键准备工作。
(二)应用场景示例
Foreground 状态在众多实际应用场景中都有着至关重要的作用。以地图应用为例,当你打开地图准备查询路线或者查看周边位置时,地图应用的 UIAbility 进入 Foreground 状态。此时,在 onForeground () 回调中,应用会申请获取定位权限,启动定位功能,实时获取你的位置信息,并在地图上精准展示,让你能快速知晓自己的方位。再比如音乐应用,当你从后台切换回音乐播放界面,UIAbility 进入 Foreground 状态,应用会在 onForeground () 回调中恢复音乐的播放,让美妙的旋律继续陪伴你,无缝衔接你的音乐享受 。
(三)代码实现解析
在代码实现层面,来看一个简单的示例:
import UIAbility from '@ohos.app.ability.UIAbility';
export default class EntryAbility extends UIAbility {
onForeground() {
// 申请系统需要的资源,这里以申请定位权限为例
const permissions: Array<string> = ['ohos.permission.LOCATION'];
Permissions.requestPermissions(permissions).then((result) => {
if (result.authResults[0] === 0) {
console.info('定位权限已授权');
// 权限授权成功,开启定位功能
this.startLocating(