学做饺子馅上那个网站,苏州注册公司代理公司,凡科网上传网站,餐饮公司网站制作概述
AppStartup提供了一种简单高效的初始化组件的方式#xff0c;开发者可以使用AppStartup来显示的设置组件的初始化顺序以及之间的依赖关系#xff0c;支持异步初始化组件加速应用的启动时间。开发者需要分别为待初始化的组件实现AppStartup提供的 StartupTask 接口…概述
AppStartup提供了一种简单高效的初始化组件的方式开发者可以使用AppStartup来显示的设置组件的初始化顺序以及之间的依赖关系支持异步初始化组件加速应用的启动时间。开发者需要分别为待初始化的组件实现AppStartup提供的 StartupTask 接口并在 startup_config.json 中配置AppStartup之间的依赖关系每个StartupTask都是一个等待执行的启动任务启动框架将使用拓扑排序保证各个启动任务的执行顺序。 说明 启动框架只支持在entry中使用。 开发流程
开启启动框架AppStartup在 module.json5配置文件 配置文件中appStartup标签中指定启动框架配置文件的路径。编写启动框架配置文件在启动框架配置文件中依次添加各个待初始化组件的配置信息并指定启动框架参数的文件路径。为每个待初始化组件添加启动任务通过实现StartupTask接口启动框架将会按顺序执行初始化流程。设置启动框架参数在启动框架参数文件中设置超时时间和组件初始化的监听器等参数。
开发指导
开启启动框架AppStartup
开启启动框架后当应用启动时系统将会读取开发者实现的配置文件并检查是否存在循环依赖采用拓扑排序对其进行排序。开发者只需要在 module.json5配置文件 中配置appStartup标签, 并指定启动框架的配置文件路径即可开启启动框架。
{module: {name: entry,type: entry,...appStartup: $profile:startup_config,...}
}编写启动框架配置文件
启动框架配置文件将为系统提供 StartupTask 的具体实现路径和参数设置从而进行读取并执行相应的启动任务。该文件为JSON格式应放在工程的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,dependencies: [StartupTask_004],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,dependencies: [StartupTask_006],runOnThread: mainThread,waitOnMainThread: true,excludeFromAutoStart: true},{name: StartupTask_006,srcEntry: ./ets/startup/StartupTask_006.ets,runOnThread: mainThread,waitOnMainThread: false,excludeFromAutoStart: true}],configEntry: ./ets/startup/StartupConfig.ets
}图1 上述startup_config.json文件中启动任务依赖关系图 startup_config.json配置文件标签说明
属性名称含义数据类型是否可缺省startupTasks待初始化组件配置信息。对象数组该标签不可缺省。configEntryStartupConfig 文件路径。字符串该标签不可缺省。
startupTasks标签说明
属性名称含义数据类型是否可缺省name待初始化组件实现 StartupTask 接口的类名称。字符串该标签不可缺省。srcEntry需要加载的组件实现 StartupTask 接口的文件路径。字符串该标签不可缺省。dependencies当前组件所依赖组件实现 StartupTask 接口的类名称数组。对象数组该标签可缺省缺省值为空。excludeFromAutoStart是否排除自动模式详细介绍可以查看 组件启动模式 。* true手动模式。false自动模式。布尔值该标签可缺省缺省值为false。waitOnMainThread是否在主线程等待。* true主线程等待组件初始化。false主线程不等待组件初始化。布尔值该标签可缺省缺省值为true。runOnThread执行初始化所在的线程。* mainThread在主线程中执行。 * taskPool在异步线程中执行。字符串该标签可缺省缺省值为mainThread。
为每个待初始化组件添加启动任务
一个 StartupTask 代表一个启动任务启动框架通过StartupTask来执行组件初始化的逻辑StartupTask有 init 和 onDependencyCompleted 两个方法。每个启动任务的功能应尽量单一该文件路径应与 startup_config 中配置的路径一致。StartupTask必须添加 Sendable 注解。以StartupTask_001为例示例代码如下。
import { StartupTask, common } from kit.AbilityKit;
import { hilog } from kit.PerformanceAnalysisKit;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));}
}设置启动框架参数
StartupConfigEntry 为启动框架的整体公用配置可以设置超时时间和组件初始化的监听器等参数监听器可以监听启动任务是否执行成功。启动框架需要分别实现 StartupConfig 与 StartupListener 文件路径需与 startup_config 中配置的StartupConfig标签路径一致。
import { StartupConfig, StartupConfigEntry, StartupListener } from kit.AbilityKit;
import { hilog } from kit.PerformanceAnalysisKit;
import { BusinessError } from kit.BasicServicesKit;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分别提供了自动和手动两种方式来初始化组件自动模式会在abilityStage的onCreate前执行组件初始化。当某些组件并不需要应用启动前就初始化而是使用时才进行初始化开发者可以根据业务需求在应用启动后进行手动调用执行初始化。
自动模式
采用自动模式开发者可以不设置 startup_config 中excludeFromAutoStart标签或设置为falseexcludeFromAutoStart默认为false。
{startupTasks: [{name: StartupTask_001,...excludeFromAutoStart: false},...],...
}手动模式
手动模式开发者可以调用 StartupManager 中的 run 方法来启动组件的初始化。以onCreate生命周期为例示例代码如下。
import { AbilityConstant, UIAbility, Want, startupManager } from kit.AbilityKit;
import { hilog } from kit.PerformanceAnalysisKit;
import { BusinessError } from kit.BasicServicesKit;export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {hilog.info(0x0000, testTag, %{public}s, Ability onCreate);let startParams [StartupTask_005, 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);}}// ...
}鸿蒙全栈开发全新学习指南
也为了积极培养鸿蒙生态人才让大家都能学习到鸿蒙开发最新的技术针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群整理了一套纯血版鸿蒙HarmonyOS Next全栈开发技术的学习路线【包含了大厂APP实战项目开发】。
本路线共分为四个阶段
第一阶段鸿蒙初中级开发必备技能 第二阶段鸿蒙南北双向高工技能基础gitee.com/MNxiaona/733GH 第三阶段应用开发中高级就业技术 第四阶段全网首发-工业级南向设备开发就业技术gitee.com/MNxiaona/733GH 鸿蒙开发面试真题含参考答案:gitee.com/MNxiaona/733GH 写在最后
如果你觉得这篇内容对你还蛮有帮助我想邀请你帮我三个小忙点赞转发有你们的 『点赞和评论』才是我创造的动力。关注小编同时可以期待后续文章ing不定期分享原创知识。想要获取更多完整鸿蒙最新学习资源请移步前往小编gitee.com/MNxiaona/733GH