鸿蒙Ability Kit(程序框架服务)【应用启动框架AppStartup】

2024-06-08 06:52

本文主要是介绍鸿蒙Ability Kit(程序框架服务)【应用启动框架AppStartup】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

应用启动框架AppStartup

概述

AppStartup提供了一种更加简单高效的初始化组件的方式,支持异步初始化组件加速应用的启动时间。使用启动框架应用开发者只需要分别为待初始化的组件实现AppStartup提供的[StartupTask]接口,并在[startup_config]中配置AppStartup之间的依赖关系,启动框架将使用拓扑排序保证各个待初始化组件的初始化顺序。启动框架只支持在entry中使用。

添加配置

应用需要在[module.json5配置文件]中配置appStartup标签, 并指定启动框架的配置文件路径。

{"module": {"name": "entry","type": "entry",..."appStartup": "$profile:startup_config",...}
}

添加启动框架配置文件

应用需要在工程的resource目录下添加启动框架的配置文件,配置文件路径需要与[module.json5配置文件]中appStartup标签指定的路径一致。

示例代码如下所示。

{"startupTasks": [{"name": "StartupTask_001","srcEntry": "./ets/startup/StartupTask_001.ets","dependencies": ["StartupTask_002","StartupTask_003"],"runOnThread": "taskPool","waitOnMainThread": false},{"name": "StartupTask_002","srcEntry": "./ets/startup/StartupTask_002.ets","dependencies": ["StartupTask_004"],"runOnThread": "taskPool","waitOnMainThread": false},{"name": "StartupTask_003","srcEntry": "./ets/startup/StartupTask_003.ets","runOnThread": "taskPool","waitOnMainThread": false},{"name": "StartupTask_004","srcEntry": "./ets/startup/StartupTask_004.ets","runOnThread": "taskPool","waitOnMainThread": false},{"name": "StartupTask_005","srcEntry": "./ets/startup/StartupTask_005.ets","runOnThread": "mainThread","waitOnMainThread": true},{"name": "StartupTask_006","srcEntry": "./ets/startup/StartupTask_006.ets","runOnThread": "mainThread","waitOnMainThread": false,"excludeFromAutoStart": true}],"configEntry": "./ets/startup/StartupConfig.ets"
}

startup_config配置文件标签说明

属性名称含义数据类型是否可缺省
startupTasks待初始化组件配置信息。对象数组该标签不可缺省。
configEntry[StartupConfig]文件路径。字符串该标签不可缺省。

startupTasks标签说明

属性名称含义数据类型是否可缺省
name待初始化组件实现[StartupTask]接口的类名称。对象数组该标签不可缺省。
srcEntry需要加载的组件实现[StartupTask]接口的文件路径。字符串该标签不可缺省。
dependencies当前组件所依赖组件实现[StartupTask]接口的类名称数组。对象数组该标签可缺省,缺省值为空。
excludeFromAutoStart是否排除自动模式。 - true:手动模式。 - false:自动模式。布尔值该标签可缺省,缺省值为false。
waitOnMainThread是否在主线程等待。 - true:主线程等待组件初始化。 - false:主线程不等待组件初始化。布尔值该标签可缺省,缺省值为true。
runOnThread执行初始化所在的线程。 - mainThread:在主线程中执行。 - taskPool:在异步线程中执行。字符串该标签可缺省,缺省值为mainThread

添加启动框架组件

所有待加载组件均要实现[StartupTask]接口,文件放置在工程的ets目录下的startup文件夹下,StartupTask必须添加[Sendable]注解。

import StartupTask from '@ohos.app.appstartup.StartupTask';
import common from '@ohos.app.ability.common';
import hilog from '@ohos.hilog';@Sendable
export default class StartupTask_001 extends StartupTask {constructor() {super();}async init(context: common.AbilityStageContext) {hilog.info(0x0000, 'testTag', 'StartupTask_001 init.');return 'StartupTask_001';}onDependencyCompleted(dependence: string, result: Object): void {hilog.info(0x0000, 'testTag', 'StartupTask_001 onDependencyCompleted, dependence: %{public}s, result: %{public}s',dependence, JSON.stringify(result));}
}

添加启动框架配置

应用需要在工程的ets目录下的startup文件夹下添加启动框架配置,开发者可以在该文件中配置超时时间以及组件初始化的监听器,启动框架配置需要在[StartupConfigEntry]中设置[StartupConfig]与[StartupListener]。

import StartupConfig from '@ohos.app.appstartup.StartupConfig';
import StartupConfigEntry from '@ohos.app.appstartup.StartupConfigEntry';
import StartupListener from '@ohos.app.appstartup.StartupListener';
import hilog from '@ohos.hilog';
import { BusinessError } from '@ohos.base';export default class MyStartupConfigEntry extends StartupConfigEntry {onConfig() {hilog.info(0x0000, 'testTag', `onConfig`);let onCompletedCallback = (error: BusinessError<void>) => {hilog.info(0x0000, 'testTag', `onCompletedCallback`);if (error) {hilog.info(0x0000, 'testTag', 'onCompletedCallback: %{public}d, message: %{public}s', error.code, error.message);} else {hilog.info(0x0000, 'testTag', `onCompletedCallback: success.`);}}let startupListener: StartupListener = {'onCompleted': onCompletedCallback}let config: StartupConfig = {'timeoutMs': 10000,'startupListener': startupListener}return config;}
}

启动组件

AppStartup分别提供了自动和手动两种方式来初始化组件,应用开发者可以根据自己的需求选择合适的初始化方式。

手动模式

手动模式需要应用开发者手动调用[StartupManager]中的[run]方法来手动启动组件的初始化。

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@ohos.base';
import startupManager from '@ohos.app.appstartup.startupManager';export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');let startParams = ['StartupTask_006'];try {startupManager.run(startParams).then(() => {console.log('StartupTest startupManager run then, startParams = ');}).catch((error: BusinessError) => {console.info("StartupTest promise catch error, error = " + JSON.stringify(error));console.info("StartupTest promise catch error, startParams = "+ JSON.stringify(startParams));})} catch (error) {let errMsg = JSON.stringify(error);let errCode: number = error.code;console.log('Startup catch error , errCode= ' + errCode);console.log('Startup catch error ,error= ' + errMsg);}}...
}

自动模式

自动模式应用开发者需要将[startup_config]中的excludeFromAutoStart标签设置为false,当应用启动时启动框架会在abilityStage的onCreate前执行组件初始化。

{"startupTasks": [{"name": "StartupTask_001",..."excludeFromAutoStart": false},...],...
}

这篇关于鸿蒙Ability Kit(程序框架服务)【应用启动框架AppStartup】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041459

相关文章

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象