1# 提升应用冷启动速度示例 2 3### 介绍 4 5本示例展示了[提升应用冷启动速度](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/performance/improve-application-cold-start-speed.md)的五种方式: 6 71. 缩短应用进程创建&初始化阶段耗时; 82. 缩短Application&Ability初始化阶段耗时; 93. 缩短AbilityStage生命周期阶段耗时; 104. 缩短Ability生命周期阶段耗时; 115. 缩短加载绘制首页阶段耗时。 12 13### 效果预览 14 15| 应用初始页面 | 任务完成界面 | 16| ------------------------------- | --------------------------------- | 17|  |  | 18 19使用说明 20 21应用在启动后显示文本"hello world";几秒后耗时操作完成,文本变更为"task complete"。 22 23### 工程目录 24``` 25entry/src/main/ 26├── ets 27│ ├── common 28│ │ └── Logger.ts // 日志工具 29│ ├── entryability 30│ │ └── EntryAbility.ts // UIAbility类 31│ ├── myabilitystage 32│ │ └── MyAbilityStage.ts // AbilityStage类 33│ └── pages 34│ └── Index.ets // 首页 35├── module.json5 36└── resources 37 ├── base 38 │ ├── element 39 │ │ ├── color.json 40 │ │ └── string.json 41 │ ├── media 42 │ │ ├── highResolutionIcon.png // 高分辨率图标 43 │ │ ├── icon.png 44 │ │ └── startIcon.png 45 │ └── profile 46 │ └── main_pages.json 47 ├── en_US 48 │ └── element 49 │ └── string.json 50 └── zh_CN 51 └── element 52 └── string.json 53 54``` 55### 具体实现 56 57#### 1. 缩短应用进程创建&初始化阶段耗时 58 59通过设置合适分辨率的startWindowIcon,缩短应用进程创建&初始化阶段耗时,进而提升应用冷启动速度。 60 61entry/src/main/module.json5 62 63```json 64{ 65 "module": { 66 "name": "entry", 67 "type": "entry", 68 "srcEntry": "./ets/myabilitystage/MyAbilityStage.ts", 69 "description": "$string:module_desc", 70 "mainElement": "EntryAbility", 71 "deviceTypes": [ 72 "default" 73 ], 74 "deliveryWithInstall": true, 75 "installationFree": false, 76 "pages": "$profile:main_pages", 77 "abilities": [ 78 { 79 "name": "EntryAbility", 80 "srcEntry": "./ets/entryability/EntryAbility.ts", 81 "description": "$string:EntryAbility_desc", 82 "icon": "$media:icon", 83 "label": "$string:EntryAbility_label", 84 "startWindowIcon": "$media:startIcon", // 优化前为"$media:highResolutionIcon" 85 "startWindowBackground": "$color:start_window_background", 86 "exported": true, 87 "skills": [ 88 { 89 "entities": [ 90 "entity.system.home" 91 ], 92 "actions": [ 93 "action.system.home" 94 ] 95 } 96 ] 97 } 98 ] 99 } 100} 101``` 102 103详情可参见:[设置合适分辨率的startWindowIcon](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/performance/improve-application-cold-start-speed.md/#设置合适分辨率的startwindowicon) 104 105#### 2. 缩短Application&Ability初始化阶段耗时 106 107通过减少import的模块,可以缩短Application&Ability初始化阶段耗时,进而提升应用冷启动速度。 108 109entry/src/main/ets/entryability/EntryAbility.ts 110 111```ts 112// 优化减少import的模块 113// import ability from '@ohos.ability.ability'; 114// import dataUriUtils from '@ohos.ability.dataUriUtils'; 115// import errorCode from '@ohos.ability.errorCode'; 116// import featureAbility from '@ohos.ability.featureAbility'; 117// import particleAbility from '@ohos.ability.particleAbility'; 118// import wantConstant from '@ohos.ability.wantConstant'; 119// import common from '@ohos.app.ability.common'; 120// import Configuration from '@ohos.app.ability.Configuration'; 121// import contextConstant from '@ohos.app.ability.contextConstant'; 122// import ConfigurationConstant from '@ohos.app.ability.ConfigurationConstant'; 123// import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility'; 124// import GesturePath from '@ohos.accessibility.GesturePath'; 125// import GesturePoint from '@ohos.accessibility.GesturePoint'; 126// import distributedAccount from '@ohos.account.distributedAccount'; 127// import osAccount from '@ohos.account.osAccount'; 128 129import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 130import UIAbility from '@ohos.app.ability.UIAbility'; 131import Want from '@ohos.app.ability.Want'; 132import window from '@ohos.window'; 133import logger from '../common/Logger'; 134``` 135 136详情可参见:[减少import的模块](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/performance/improve-application-cold-start-speed.md/#减少import的模块) 137 138#### 3. 缩短AbilityStage生命周期阶段耗时 139 140通过将AbilityStage生命周期回调接口中的耗时操作改为异步延迟执行,可以缩短AbilityStage生命周期阶段耗时,进而提升应用冷启动速度。 141 142entry/src/main/ets/myabilitystage/MyAbilityStage.ts 143 144```ts 145export default class MyAbilityStage extends AbilityStage { 146 onCreate(): void { 147 // 应用的HAP在首次加载的时,为该Module初始化操作 148 // 耗时操作 149 // this.computeTask(); 150 this.computeTaskAsync(); // 异步任务 151 } 152 // ... 153} 154``` 155 156详情可参见:[避免在AbilityStage生命周期回调接口进行耗时操作](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/performance/improve-application-cold-start-speed.md/#避免在abilitystage生命周期回调接口进行耗时操作) 157 158#### 4. 缩短Ability生命周期阶段耗时 159 160通过将Ability生命周期回调接口中的耗时操作改为异步延迟执行,可以缩短Ability生命周期阶段耗时,进而提升应用冷启动速度。 161 162通常与应用冷启动速度相关的生命周期回调为onCreate、onWindowStageCreate和onForeground,以下以onCreate为例进行说明。 163 164entry/src/main/ets/entryability/EntryAbility.ts 165 166```ts 167export default class EntryAbility extends UIAbility { 168 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { 169 logger.info('Ability onCreate'); 170 // 耗时操作 171 // this.computeTask(); 172 this.computeTaskAsync(); // 异步任务 173 } 174 // ... 175} 176``` 177 178详情可参见:[避免在Ability生命周期回调接口进行耗时操作](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/performance/improve-application-cold-start-speed.md/#避免在ability生命周期回调接口进行耗时操作) 179 180#### 5. 缩短加载绘制首页阶段耗时 181 182通过将自定义组件的生命周期回调接口中的耗时操作改为异步延迟执行,可以缩短加载绘制首页阶段耗时,进而提升应用冷启动速度。 183 184entry/src/main/ets/pages/Index.ets 185 186```ts 187@Entry 188@Component 189struct Index { 190 // ... 191 aboutToAppear() { 192 // 耗时操作 193 // this.computeTask(); 194 this.computeTaskAsync(); // 异步任务 195 let context = getContext(this) as Context; 196 this.text = context.resourceManager.getStringSync($r('app.string.startup_text')); 197 } 198 // ... 199} 200``` 201 202详情可参见:[自定义组件生命周期回调接口里避免耗时操作](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/performance/improve-application-cold-start-speed.md/#自定义组件生命周期回调接口里避免耗时操作) 203 204### 相关权限 205 206不涉及。 207 208### 依赖 209 210不涉及。 211 212### 约束与限制 213 2141.本示例仅支持标准系统上运行,支持设备:RK3568。 215 2162.本示例已适配API version 10版本SDK,版本号:4.0.10.13。 217 2183.本示例需要使用DevEco Studio 4.0 (Build Version: 4.0.0.600 构建 2023年10月17日)及以上版本才可编译运行。 219 220### 下载 221 222如需单独下载本工程,执行如下命令: 223 224``` 225git init 226git config core.sparsecheckout true 227echo code/DocsSample/Ability/Performance/Startup/ > .git/info/sparse-checkout 228git remote add origin https://gitee.com/openharmony/applications_app_samples.git 229git pull origin master 230```