当前仓库属于关闭状态,部分功能使用受限,详情请查阅 仓库状态说明
145 Star 1.4K Fork 1.7K

OpenHarmony/applications_app_samples
关闭

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

提升应用冷启动速度示例

介绍

本示例展示了提升应用冷启动速度的五种方式:

  1. 缩短应用进程创建&初始化阶段耗时;
  2. 缩短Application&Ability初始化阶段耗时;
  3. 缩短AbilityStage生命周期阶段耗时;
  4. 缩短Ability生命周期阶段耗时;
  5. 缩短加载绘制首页阶段耗时。

效果预览

应用初始页面 任务完成界面

使用说明

应用在启动后显示文本"hello world";几秒后耗时操作完成,文本变更为"task complete"。

工程目录

entry/src/main/
├── ets
│   ├── common
│   │   └── Logger.ts                     // 日志工具
│   ├── entryability
│   │   └── EntryAbility.ts               // UIAbility类
│   ├── myabilitystage
│   │   └── MyAbilityStage.ts             // AbilityStage类
│   └── pages
│       └── Index.ets                     // 首页
├── module.json5
└── resources
    ├── base
    │   ├── element
    │   │   ├── color.json
    │   │   └── string.json
    │   ├── media
    │   │   ├── highResolutionIcon.png    // 高分辨率图标
    │   │   ├── icon.png
    │   │   └── startIcon.png
    │   └── profile
    │       └── main_pages.json
    ├── en_US
    │   └── element
    │       └── string.json
    └── zh_CN
        └── element
            └── string.json

具体实现

1. 缩短应用进程创建&初始化阶段耗时

通过设置合适分辨率的startWindowIcon,缩短应用进程创建&初始化阶段耗时,进而提升应用冷启动速度。

entry/src/main/module.json5

{
  "module": {
    "name": "entry",
    "type": "entry",
    "srcEntry": "./ets/myabilitystage/MyAbilityStage.ts",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "default"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ts",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:icon",
        "label": "$string:EntryAbility_label",
        "startWindowIcon": "$media:startIcon",	// 优化前为"$media:highResolutionIcon"
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ]
      }
    ]
  }
}

详情可参见:设置合适分辨率的startWindowIcon

2. 缩短Application&Ability初始化阶段耗时

通过减少import的模块,可以缩短Application&Ability初始化阶段耗时,进而提升应用冷启动速度。

entry/src/main/ets/entryability/EntryAbility.ts

// 优化减少import的模块
// import ability from '@ohos.ability.ability';
// import dataUriUtils from '@ohos.ability.dataUriUtils';
// import errorCode from '@ohos.ability.errorCode';
// import featureAbility from '@ohos.ability.featureAbility';
// import particleAbility from '@ohos.ability.particleAbility';
// import wantConstant from '@ohos.ability.wantConstant';
// import common from '@ohos.app.ability.common';
// import Configuration from '@ohos.app.ability.Configuration';
// import contextConstant from '@ohos.app.ability.contextConstant';
// import ConfigurationConstant from '@ohos.app.ability.ConfigurationConstant';
// import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
// import GesturePath from '@ohos.accessibility.GesturePath';
// import GesturePoint from '@ohos.accessibility.GesturePoint';
// import distributedAccount from '@ohos.account.distributedAccount';
// import osAccount from '@ohos.account.osAccount';

import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import UIAbility from '@ohos.app.ability.UIAbility';
import Want from '@ohos.app.ability.Want';
import window from '@ohos.window';
import logger from '../common/Logger';

详情可参见:减少import的模块

3. 缩短AbilityStage生命周期阶段耗时

通过将AbilityStage生命周期回调接口中的耗时操作改为异步延迟执行,可以缩短AbilityStage生命周期阶段耗时,进而提升应用冷启动速度。

entry/src/main/ets/myabilitystage/MyAbilityStage.ts

export default class MyAbilityStage extends AbilityStage {
  onCreate(): void {
    // 应用的HAP在首次加载的时,为该Module初始化操作
    // 耗时操作
    // this.computeTask();
    this.computeTaskAsync(); // 异步任务
  }
  // ...
}

详情可参见:避免在AbilityStage生命周期回调接口进行耗时操作

4. 缩短Ability生命周期阶段耗时

通过将Ability生命周期回调接口中的耗时操作改为异步延迟执行,可以缩短Ability生命周期阶段耗时,进而提升应用冷启动速度。

通常与应用冷启动速度相关的生命周期回调为onCreate、onWindowStageCreate和onForeground,以下以onCreate为例进行说明。

entry/src/main/ets/entryability/EntryAbility.ts

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    logger.info('Ability onCreate');
    // 耗时操作
    // this.computeTask();
    this.computeTaskAsync(); // 异步任务
  }
  // ...
}

详情可参见:避免在Ability生命周期回调接口进行耗时操作

5. 缩短加载绘制首页阶段耗时

通过将自定义组件的生命周期回调接口中的耗时操作改为异步延迟执行,可以缩短加载绘制首页阶段耗时,进而提升应用冷启动速度。

entry/src/main/ets/pages/Index.ets

@Entry
@Component
struct Index {
  // ...
  aboutToAppear() {
    // 耗时操作
    // this.computeTask();
    this.computeTaskAsync(); // 异步任务
    let context = getContext(this) as Context;
    this.text = context.resourceManager.getStringSync($r('app.string.startup_text'));
  }
  // ...
}

详情可参见:自定义组件生命周期回调接口里避免耗时操作

相关权限

不涉及。

依赖

不涉及。

约束与限制

1.本示例仅支持标准系统上运行,支持设备:RK3568。

2.本示例已适配API version 10版本SDK,版本号:4.0.10.13。

3.本示例需要使用DevEco Studio 4.0 (Build Version: 4.0.0.600 构建 2023年10月17日)及以上版本才可编译运行。

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo code/DocsSample/Ability/Performance/Startup/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/openharmony/applications_app_samples.git
git@gitee.com:openharmony/applications_app_samples.git
openharmony
applications_app_samples
applications_app_samples
master

搜索帮助