1-14.【Stage 模型】冷启动与热启动在 Stage 模型下如何区分?

3 阅读3分钟

1️⃣ 基本概念

类型定义
冷启动(Cold Start)应用或 Ability 从未在内存中存在,需要 创建进程、加载 HAP、初始化 UIAbility 和 WindowStage
热启动(Hot Start)应用或 Ability 已在内存中存在,复用现有实例和 WindowStage 页面栈,无需重复加载 HAP 或初始化资源

✅ 核心:冷启动涉及进程和 HAP 初始化,热启动只需恢复已有状态


2️⃣ Stage 模型下的区分逻辑

  1. Ability 级别

    • 冷启动:UIAbility 或 ServiceAbility 不存在进程/实例

      • 系统执行 onCreate()onWindowStageCreate() → 初始化页面栈
    • 热启动:UIAbility 已存在于内存

      • 系统调用 onForeground() → WindowStage 页面栈直接显示
      • 页面状态保持,无需重新创建页面
  2. WindowStage / 页面栈级别

    • 冷启动:

      • WindowStage 和 Page 栈需要完全创建
      • 页面状态初始化
    • 热启动:

      • 复用 WindowStage,直接显示栈顶页面
      • 页面状态可通过缓存或序列化恢复
  3. HAP 加载

    • 冷启动:

      • Entry + Feature HAP 可能被动态加载
      • UIAbility 和 ServiceAbility 都需初始化
    • 热启动:

      • 所需 HAP 已加载,无需重复解压和初始化

3️⃣ Stage 模型特性对冷/热启动的优化

特性优化策略作用
WindowStage 独立页面栈热启动复用页面栈,不重新渲染加快页面显示,减少资源占用
HAP 模块化 / 按需加载冷启动按需加载 Feature HAP减少初始包体积,优化冷启动速度
Ability 生命周期管理热启动只触发 onForeground(),避免重复初始化避免重复对象创建、网络请求或数据库初始化
UI缓存机制页面可保留状态或序列化恢复提升用户体验,页面显示快速

4️⃣ 冷/热启动判定策略

开发者可以通过以下方式判断:

  1. 系统回调判断

    • onCreate() → 冷启动
    • onForeground() → 热启动
  2. WindowStage 页面栈检查

    • 页面栈为空 → 冷启动
    • 页面栈存在 → 热启动
  3. HAP加载状态

    • HAP 未加载 → 冷启动
    • HAP 已加载 → 热启动

5️⃣ 工程实践建议

  • 冷启动优化

    • Entry HAP 尽量轻量,延迟加载 Feature
    • UIAbility 初始化逻辑拆分,延迟非必要资源加载
  • 热启动优化

    • 保留 WindowStage 页面栈
    • 页面状态序列化/缓存,提高恢复速度
    • 避免重复网络请求或资源初始化
  • 跨 HAP / 跨 Ability 热启动

    • 利用 AbilityManager + WindowStage 复用已加载 Ability
    • 参数传递尽量轻量化

🔹 总结

区分维度冷启动热启动
Ability 是否存在不存在 → 创建已存在 → 复用
WindowStage 页面栈需新建可复用
HAP 加载动态加载或初始化已加载
生命周期回调onCreate()onWindowStageCreate()onForeground()onForeground()
优化策略延迟加载 HAP / 页面 / 资源页面栈复用 / 状态恢复 / 避免重复初始化

✅ 核心理解:冷启动 = 从零开始创建进程 + Ability + WindowStage + 页面栈;热启动 = 内存复用,只触发前台回调与页面显示