专门做设计的网站有哪些,企业门户网站什么意思,本地佛山顺德网站建设,网站建设yuue应用启动框架AppStartup
概述
AppStartup提供了一种更加简单高效的初始化组件的方式#xff0c;支持异步初始化组件加速应用的启动时间。使用启动框架应用开发者只需要分别为待初始化的组件实现AppStartup提供的[StartupTask]接口#xff0c;并在[startup_config]中配置App…应用启动框架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: BusinessErrorvoid) {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},...],...
}