README_zh.md
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```