应用启动是指用户通过入口(如桌面图标、快捷方式等)触发系统拉起应用的过程。在应用模型中,一次典型的应用启动会依次经历进程启动、AbilityStage启动、UIAbility启动三个阶段,并在此过程中触发对应的生命周期回调。理解三者的关系与时序,有助于开发者在正确的时机完成初始化、资源申请与界面加载。
进程启动:进程是系统进行资源分配的基本单位,详见进程模型概述。当应用的首个进程创建时,意味着应用的启动。默认情况下,应用中(同一Bundle名称)的所有UIAbility组件运行在同一个独立进程(主进程)中。如果目标进程尚未创建,系统会先创建应用进程,并在进程内创建主线程进入消息循环;若进程已存在(如热启动场景),则直接复用已有进程。
AbilityStage启动:AbilityStage是一个Module级别的组件管理器,应用的HAP在首次加载时会创建一个AbilityStage实例,每个HAP对应一个AbilityStage实例。在开始加载对应Module的第一个应用组件实例之前,系统会先创建AbilityStage,并在创建完成后执行其onCreate()生命周期回调,用于通知开发者可以对该Module进行初始化。
UIAbility启动:UIAbility组件是一种包含UI的应用组件。三方应用必须包含至少一个UIAbility组件,否则没有界面对用户展示。UIAbility实例创建后,系统会依次触发onCreate()、onWindowStageCreate()、onForeground()生命周期回调,完成UI加载并展示在前台。
进程、AbilityStage与UIAbility生命周期的关系如下图所示。

| 阶段 | 触发时机 | 主要职责 |
|---|---|---|
| 进程启动 | 应用首个进程创建时 | 分配系统资源、创建主线程、加载应用运行环境 |
| AbilityStage启动 | HAP首次加载、创建第一个应用组件实例前 | Module级初始化,如资源预加载、线程创建、启动框架任务执行 |
| UIAbility启动 | 创建UIAbility实例并展示 | 实例级初始化、UI加载、前后台资源申请与释放 |
如概述所述,系统会先创建AbilityStage并执行其onCreate()回调。该回调在每个HAP的生命周期中仅触发一次,适合放置Module级别的初始化逻辑。
建议在此回调中:
不建议在此回调中:
当UIAbility指定实例模式(specified)启动时,系统会触发AbilityStage的onAcceptWant()回调,由开发者返回实例标识来决定复用已有UIAbility实例还是创建新实例。
建议在此回调中:
不建议在此回调中:
该回调在UIAbility实例的整个生命周期中仅触发一次,开发者可以在该回调中执行仅发生一次的启动逻辑。
建议在此回调中:
不建议在此回调中:
应用的启动入口是指用户进入应用的途径(如桌面图标、快捷方式等)。不同入口在触发UIAbility启动时,系统传入的Want参数(如action、uri、parameters)可能不同,开发者可在UIAbility的onCreate()或onNewWant()中据此区分来源并执行相应逻辑。
应用也可被其他应用通过Want或应用链接拉起,或被系统通过意图框架调度启动。这类跨应用启动场景的详细说明请参见应用间跳转。
应用图标是应用最常见的启动入口,通常显示在系统桌面上。用户点击桌面图标后,系统会根据module.json5配置文件中声明的入口UIAbility(通常为entry类型HAP中startWindowIcon与label所对应的UIAbility)发起启动。
快捷方式是指长按应用图标弹出的快捷菜单项,允许用户直接跳转到应用的特定功能页面。开发者可以在module.json5配置文件的shortcuts标签中声明静态快捷方式,或通过shortcutManager接口动态发布快捷方式。
在PC/2in1、Tablet等设备上,用户可将应用固定到快捷栏,点击图标即可快速启动。