本项目是展示应用快启特性接入的实例。示例页面提供快启启动开关:开启后,应用可通过快启能力完成启动;关闭后,应用将按照常规冷启动流程启动。
当前访问频次受限,请登录后继续访问
基于应用快启技术实现的应用加速启动
项目介绍
本项目是展示应用快启特性接入的实例。示例页面提供快启启动开关:开启后,应用可通过快启能力完成启动;关闭后,应用将按照常规冷启动流程启动。
为直观体现快启特性适配的必要性和关键点,本示例以“颜色模式”为验证场景。完成快启适配后,应用在切换颜色模式并再次快启后能够正确展示对应颜色;未完成适配时,颜色状态无法正确同步,导致页面显示异常。
效果预览
| 界面 |
|---|
![]() |
| 冷启动 | 快启 |
|---|---|
![]() |
![]() |
| 冷启动切换颜色模式 | 快启(已正确适配应用代码)切换颜色模式 | 快启(未正确适配应用代码)切换颜色模式 |
|---|---|---|
![]() |
![]() |
![]() |
使用说明
- 使用 DevEco Studio 打开工程并配置签名。
- 确认
entry/src/main/module.json5中的srcEntry指向需要的 AbilityStage:- 已正确适配的应用代码:
./ets/MyAbilityStageAdapted.ets - 未正确适配的应用代码:
./ets/MyAbilityStage.ets
- 已正确适配的应用代码:
- 编译并运行debug版应用,进入主页面后可切换深色模式和快启启动开关。
- 开启快启特性后,根据弹窗提示执行快启初始化流程,再对比冷启动和快启效果。
学习路径
- 查看
entry/src/main/ets/pages/Index.ets,了解页面开关入口和配置写入流程。 - 查看
entry/src/main/ets/MyAbilityStage.ets,观察未适配版本中快启风险操作的位置。 - 查看
entry/src/main/ets/MyAbilityStageAdapted.ets,对比风险操作后置到onAboutToCreateAbility后的适配方式。 - 修改
entry/src/main/module.json5中的srcEntry,切换未适配/已适配版本并验证差异。 - 查看 应用待适配点扫描工具README,了解如何使用IDE插件扫描快启启动风险点
工程结构
HyperStartup/
├──AppScope
│ ├──resources
│ └──app.json5 // 应用级配置,包含 bundleName、版本、图标和应用名称
├──entry
│ ├──src
│ │ ├──main
│ │ │ ├──ets
│ │ │ │ ├──constants
│ │ │ │ │ ├──AppConstants.ets // 应用通用常量
│ │ │ │ │ ├──AppStorageKeys.ets // AppStorage 键名常量
│ │ │ │ │ └──PageStyleConstants.ets // 页面样式常量
│ │ │ │ ├──entryability
│ │ │ │ │ └──EntryAbility.ets // 应用入口 Ability
│ │ │ │ ├──entrybackupability
│ │ │ │ │ └──EntryBackupAbility.ets
│ │ │ │ ├──pages
│ │ │ │ │ └──Index.ets // Demo 主页面,包含深色模式和快启开关
│ │ │ │ ├──utils
│ │ │ │ │ └──Logger.ets
│ │ │ │ ├──MyAbilityStage.ets // 未适配快启的 AbilityStage 实现
│ │ │ │ └──MyAbilityStageAdapted.ets // 已适配快启的 AbilityStage 实现
│ │ │ ├──resources
│ │ │ └──module.json5 // entry 模块配置,srcEntry 在此切换适配版本
│ │ ├──mock
│ │ ├──ohosTest
│ │ └──test
│ ├──build-profile.json5
│ ├──hvigorfile.ts
│ ├──obfuscation-rules.txt
│ └──oh-package.json5
├──hvigor
│ └──hvigor-config.json5
├──screenshots
│ ├──cold-start.gif
│ ├──cold-start-switch.gif
│ ├──demo_phone.png
│ ├──hyperstartup-adapted-switch.gif
│ ├──hyperstartup-start.gif
│ └──hyperstartup-unadapted-switch.gif
├──tools
│ ├──DevEco插件
│ ├──images
│ ├──静态扫描工具
│ └──hyperstartupcheck-user-manual.md // 快启待适配点检查工具说明 README
├──build-profile.json5 // 工程级构建配置和签名配置
├──code-linter.json5
├──hvigorfile.ts
├──LICENCE
├──oh-package-lock.json5
├──oh-package.json5
└──README.md
具体实现
整体流程如下:
- 主页面通过
@StorageLink绑定AppStorage中的深色模式和快启开关状态。 - 用户切换深色模式时,
Index.ets先更新页面状态,再通过preferences写入DARK_MODE_KEY。 - 用户切换快启启动时,
Index.ets调用setHyperSnapEnabled(isEnabled)更新系统快启开关,并通过preferences写入HYPER_STARTUP_ENABLED_KEY。 - 应用下次启动时,AbilityStage 从
preferences读取配置,再写回AppStorage,页面即可恢复上次的显示状态。 - 快启场景下,配置读取必须放在快启流程中执行,否则可能读取不到用户最新设置。
页面配置写入
页面入口位于 entry/src/main/ets/pages/Index.ets,主要包含两个开关:
- 深色模式开关:调用
toggleTheme(isDark),更新AppStorageKeys.IS_DARK_MODE对应的页面状态,并将结果保存到preferences的DARK_MODE_KEY。 - 快启启动开关:调用
toggleHyperStartup(isEnabled),通过loadNativeModule('@ohos.app.ability.hyperSnapManager')获取快启管理模块,再调用setHyperSnapEnabled(isEnabled)开启或关闭快启,并将结果保存到preferences的HYPER_STARTUP_ENABLED_KEY。
开启快启后,页面会弹出重新执行快启初始化流程的提示,快启初始化完成后,后续才可以正常执行快启。
快启适配原则
快启初始化阶段会执行应用的部分启动逻辑并保存下来。因此,任何依赖真实运行时环境或外部数据的操作,都不适合在快启初始化流程中执行,例如:
- 读取或写入本地文件、
preferences等磁盘数据。 - 访问网络、数据库、云端配置等随时间变化的数据。
- 发起 IPC 调用或注册依赖真实进程状态的监听。
这些操作应后置到快启流程中。对于本 Demo,关键风险点是 AbilityStage 启动阶段读取 preferences:如果只在初始化快启阶段读取深色模式配置,后续每次快启时都会沿用初始化快启时的状态,而不是用户最近一次保存的状态。
适配中涉及的接口如下:
onAboutToCreateAbility:冷启动和快启都会回调,适合放置需要从快启初始化流程后移的业务状态。onLaunchFromHyperSnap:仅快启时回调,适合处理只在快启场景需要执行的逻辑。setHyperSnapEnabled:普通调用接口,用于设置是否启用快启。 本 Demo 使用onAboutToCreateAbility即可覆盖冷启动和快启。
获取快启待适配点
快启待适配点主要指应用在快启初始化阶段可能执行的风险操作,例如文件读写、IPC 调用、访问网络等,如不适配可能导致应用存在脏数据等问题。可通过代码扫描 IDE 工具获取待适配点,详见 待适配点扫描工具 README。
适配前后对比
项目提供了两个 AbilityStage,便于直接对比未适配和已适配的差异。
MyAbilityStage.ets(未适配版本)
- 在
onCreate中调用loadColorMode(),直接读取preferences中的深色模式配置。 onCreate位于快启点之前,读取preferences属于磁盘访问,快启时有风险。- 从快启启动时,
onCreate中的读取逻辑不会按普通冷启动路径重新执行,可能导致用户切换后的深色模式没有在重新打开应用后生效。
MyAbilityStageAdapted.ets(已适配版本)
onCreate中只保留快启初始化流程中允许执行的轻量逻辑,不读取外部配置。- 在
onAboutToCreateAbility中调用loadHyperStartupConfig()和loadColorMode()。 - 冷启动和快启都会进入
onAboutToCreateAbility,因此每次真正创建 Ability 前都会重新读取preferences,确保页面拿到用户最近一次保存的状态。 - 适配后,深色模式切换结果不会被快启初始化流程时读取的旧状态固定住。
切换验证版本
在 entry/src/main/module.json5 的 srcEntry 中选择使用哪个 AbilityStage。
当前默认使用已适配版本:
{
"srcEntry": "./ets/MyAbilityStageAdapted.ets"
}
如需观察未适配问题,可切换为:
{
"srcEntry": "./ets/MyAbilityStage.ets"
}
修改后重新编译运行,再分别对比冷启动、快启下切换深色模式的效果。
相关权限
无特殊权限要求
模块依赖
@kit.AbilityKit- AbilityStage 相关 API@kit.ArkData- preferences 本地存储 API
约束与限制
- 快启功能当前仅支持在API24的畅享90Pro Max和Mate 80 Pro上运行
- HarmonyOS版本大于等于7.0
- 快启功能在系统后台占用少量资源,每用户同时生效快启的应用有限制





