目录
(一)与 onWindowStageCreate 的顺序与协作
(二)对 Foreground 和 Background 状态的影响
一、UIAbility 组件简介
**
在 HarmonyOS 的应用开发宇宙里,UIAbility 组件可是一颗璀璨的明星,占据着核心 C 位。它就像是应用与用户之间的一座桥梁,是两者交互的关键窗口。从本质上来说,UIAbility 是应用程序中负责展示用户界面(UI),并处理与用户交互操作的核心组件。它为开发者提供了构建各种界面元素、响应用户输入以及管理界面生命周期的能力。
打个比方,当你打开手机上的音乐应用,那个可以让你看到歌曲列表、播放按钮、进度条,还能点击操作播放音乐的界面,就是由 UIAbility 组件来搭建和管理的。它把应用的功能以直观的图形界面呈现给用户,让用户能够轻松地与应用进行互动。
在整个应用架构的大版图中,UIAbility 有着举足轻重的地位。它是应用直接面向用户的部分,决定了用户对应用的第一印象和使用体验。一个设计优秀、交互流畅的 UIAbility 组件,能让用户迅速上手应用,沉浸在应用提供的服务中;反之,如果 UIAbility 组件设计不佳,用户界面混乱、操作不便捷,很可能导致用户迅速卸载应用。所以,开发好 UIAbility 组件,是打造一款成功应用的重要基础 。
不仅如此,UIAbility 组件还与 HarmonyOS 的系统调度紧密相连。它是系统调度的基本单元,系统会根据用户的操作和设备资源状况,对 UIAbility 组件的生命周期进行管理,比如启动、暂停、恢复和销毁等,以确保应用在各种情况下都能稳定、高效地运行。
二、UIAbility 生命周期概览
就像世间万物都有从诞生到消逝的过程一样,UIAbility 组件也有着自己独特的生命周期,从被创建的那一刻起,便开启了它在应用世界里的 “旅程”,直至最终被销毁。这一过程涵盖了多个关键阶段,每个阶段都伴随着特定的事件和操作,而这些阶段的有序流转,共同保障了应用的稳定运行和良好的用户体验。
当用户点击应用图标启动应用时,UIAbility 的生命周期便正式拉开帷幕。首先进入的是创建阶段,这个阶段就如同新生命的诞生,系统会为 UIAbility 分配必要的资源,创建相关的实例,为后续的操作奠定基础。紧接着,在窗口创建完成后,会进入一个准备展示用户界面的阶段 。此时,UIAbility 还未完全呈现在用户眼前,但已经在为即将到来的展示做着最后的准备工作,比如加载相关的布局文件、初始化一些与界面展示紧密相关的资源等。
随后,当 UIAbility 准备就绪,便会进入前台阶段,这意味着它所承载的用户界面正式展示在用户面前,用户可以与之进行交互,点击按钮、滑动屏幕等操作都能得到及时响应。在前台阶段,UIAbility 处于活跃状态,不断地与用户进行互动,处理各种用户输入事件。
然而,应用的运行过程并非总是一帆风顺,用户可能会因为各种原因切换到其他应用,或者回到桌面。这时,UIAbility 就会从前台切换到后台,进入后台阶段。在这个阶段,UIAbility 虽然不再直接与用户交互,但仍然驻留在内存中,等待着再次被唤起。此时,为了节省系统资源,应用通常会暂停一些不必要的操作,比如停止动画播放、暂停网络请求等,同时也会保存当前的一些关键状态,以便在重新回到前台时能够快速恢复到之前的状态 。
如果用户不再需要使用该应用,选择关闭应用,或者系统因为资源紧张等原因需要回收资源,UIAbility 就会进入销毁阶段。在这个阶段,UIAbility 会释放所有占用的系统资源,比如关闭数据库连接、注销各种事件监听、释放内存等,就像是生命走到尽头,将一切都归还给系统,为新的应用或进程腾出空间。
在 UIAbility 的整个生命周期中,Create 状态作为初始创建阶段,无疑是至关重要的起点,它为后续的一系列流程奠定了基础,决定了 UIAbility 在后续运行中的基本配置和初始状态。
三、Create 状态深度剖析
(一)触发时机
Create 状态的触发时机非常关键,它就像是应用旅程的起点。当应用首次启动时,系统会创建 UIAbility 实例,此时 Create 状态便被触发 。这就好比一辆汽车发动引擎,准备开启行程,Create 状态就是引擎启动的那一刻。在这个瞬间,应用的一系列初始化操作即将展开,为后续的运行奠定基础。无论是加载必要的资源,还是进行一些初始的配置,都从这个触发点开始。例如,当你打开一款电商应用,Create 状态会在你点击应用图标后迅速触发,应用开始为你构建商品展示的基本框架、加载用户登录信息等基础数据,虽然这些操作在后台默默进行,但却是应用能够正常运行的关键前奏 。
(二)回调函数 onCreate
- 函数签名与参数解析
在 Create 状态被触发时,系统会调用一个至关重要的回调函数 ——onCreate。这个函数的签名为 onCreate (want, launchParam),其中包含了两个重要的参数:want 和 launchParam 。
want 就像是一个 “信息包裹”,它承载着启动目标以及启动时需携带的相关数据 。比如,当一个应用内的某个 UIAbility 需要启动另一个 UIAbility 时,want 会携带目标 UIAbility 所在应用的包名(bundleName)、目标 UIAbility 的名称(abilityName)等信息,就像一份详细的导航地图,指引系统找到正确的目标。同时,它还可以携带一些自定义的数据,以便在目标 UIAbility 启动时使用。例如,在一个新闻应用中,当点击一篇新闻详情链接时,want 可以携带新闻的 ID、标题等信息,传递给负责展示新闻详情的 UIAbility,让其能够准确地加载并展示对应的新闻内容。
launchParam 则是启动参数,它包含了一些关于启动原因、上次退出原因等信息。通过 launchParam.launchReason,开发者可以了解到应用是如何被启动的,是用户正常点击启动,还是通过其他应用的调用启动,亦或是因为系统的某些操作而启动 。这对于应用根据不同的启动情况进行相应的处理非常重要。比如,如果是因为接收到推送消息而启动,应用可以直接跳转到与推送消息相关的页面;而 launchParam.lastExitReason 则能让开发者知晓应用上次退出的原因,是正常退出,还是因为异常情况被系统关闭等,这有助于在应用重新启动时进行一些必要的恢复操作。
- 常见操作示例
在 onCreate 回调中,可以进行丰富多样的初始化操作。首先是定义全局变量,这些全局变量就像是应用的 “通用工具”,在应用的各个部分都可能被用到。比如,定义一个全局的用户信息变量,当用户登录后,将用户的 ID、用户名、头像等信息存储在这个变量中,这样在应用的不同页面和功能模块中,都可以方便地获取和使用这些用户信息 。在一个社交应用中,用户登录后,其好友列表信息也可以存储在全局变量中,以便在展示好友动态、聊天列表等页面时能够快速获取。
加载资源也是 onCreate 回调中的常见操作。这里的资源包括图片、音频、视频、配置文件等。以一个视频播放应用为例,在 onCreate 中可以加载应用的默认封面图片、一些常用的图标资源,以及视频播放的配置文件,如视频解码格式、播放清晰度的默认设置等 。这些资源的提前加载,能够让应用在后续的运行中更加流畅,当用户真正需要使用这些资源时,无需等待漫长的加载时间。此外,还可以在 onCreate 中进行一些数据库的初始化连接操作,为应用的数据存储和读取做好准备,就像为一座房子打好坚实的地基,让后续的数据操作能够稳定进行。