1# @ohos.app.appstartup.startupManager (启动框架管理能力) 2<!--Kit: Ability Kit--> 3<!--Subsystem: Ability--> 4<!--Owner: @yzkp--> 5<!--Designer: @yzkp--> 6<!--Tester: @lixueqing513--> 7<!--Adviser: @huipeizi--> 8 9本模块提供应用启动框架管理启动任务的能力,只能在主线程调用。 10 11> **说明:** 12> 13> 本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 14> 15> 本模块从API version 18开始支持so预加载。 16> 17> 本模块接口仅可在Stage模型下使用。 18 19## 导入模块 20 21```ts 22import { startupManager } from '@kit.AbilityKit'; 23``` 24 25## startupManager.run 26run(startupTasks: Array\<string\>, config?: StartupConfig): Promise\<void\> 27 28执行启动框架启动任务或加载so文件。 29 30> **说明:** 31> 32> 如果需要执行feature类型HAP中的启动任务,不支持使用该接口,需要使用[startupManager.run](#startupmanagerrun20)接口。 33 34**系统能力**:SystemCapability.Ability.AppStartup 35 36**参数:** 37 38| 参数名 | 类型 | 必填 | 说明 | 39| -------- | -------- | -------- | -------- | 40| startupTasks | Array\<string\> | 是 | 表示准备执行的启动任务[StartupTask](js-apis-app-appstartup-startupTask.md)的名称和预加载so名称的数组。 | 41| config | [StartupConfig](./js-apis-app-appstartup-startupConfig.md) | 否 | 启动框架超时时间与启动任务监听器配置。 | 42 43**返回值:** 44 45| 类型 | 说明 | 46| -------- | -------- | 47| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 48 49**错误码:** 50 51以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。 52 53 | 错误码ID | 错误信息 | 54 | ------- | -------------------------------- | 55 | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 56 | 16000050 | Internal error. | 57 | 28800001 | Startup task or its dependency not found. | 58 | 28800002 | The startup tasks have circular dependencies. | 59 | 28800003 | An error occurred while running the startup tasks. | 60 | 28800004 | Running startup tasks timeout. | 61 62**示例:** 63 64```ts 65import { AbilityConstant, UIAbility, Want, startupManager } from '@kit.AbilityKit'; 66import { hilog } from '@kit.PerformanceAnalysisKit'; 67import { BusinessError } from '@kit.BasicServicesKit'; 68 69export default class EntryAbility extends UIAbility { 70 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { 71 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); 72 let startParams = ['StartupTask_001', 'libentry_001']; 73 try { 74 // 手动调用run方法 75 startupManager.run(startParams).then(() => { 76 console.log(`StartupTest startupManager run then, startParams = ${startParams}.`); 77 }).catch((error: BusinessError) => { 78 console.error(`StartupTest promise catch failed, error code: ${error.code}, error msg: ${error.message}.`); 79 }); 80 } catch (error) { 81 let errMsg = (error as BusinessError).message; 82 let errCode = (error as BusinessError).code; 83 console.error(`Startup.run failed, err code: ${errCode}, err msg: ${errMsg}.`); 84 } 85 } 86 87 // ... 88} 89``` 90 91## startupManager.run<sup>20+</sup> 92 93run(startupTasks: Array\<string\>, context: common.AbilityStageContext, config: StartupConfig): Promise\<void\> 94 95执行启动框架启动任务或加载so文件。支持指定[AbilityStageContext](js-apis-inner-application-abilityStageContext.md)用于启动任务的加载。使用Promise异步回调。 96 97**系统能力**:SystemCapability.Ability.AppStartup 98 99**参数:** 100 101| 参数名 | 类型 | 必填 | 说明 | 102| ------------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 103| startupTasks | Array\<string\> | 是 | 表示准备执行的启动任务[StartupTask](js-apis-app-appstartup-startupTask.md)的名称和预加载so名称的数组。 | 104| context | [common.AbilityStageContext](js-apis-inner-application-abilityStageContext.md) | 是 | 表示执行启动任务[StartupTask](js-apis-app-appstartup-startupTask.md)的AbilityStage上下文,作为入参传给启动任务的[init](js-apis-app-appstartup-startupTask.md#init)。 | 105| config | [StartupConfig](./js-apis-app-appstartup-startupConfig.md) | 是 | 启动框架超时时间与启动任务监听器配置。 | 106 107**返回值:** 108 109| 类型 | 说明 | 110| --------------- | -------------------------------------- | 111| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 112 113**错误码:** 114 115以下错误码详细介绍请参考[元能力子系统错误码](errorcode-ability.md)。 116 117| 错误码ID | 错误信息 | 118| -------- | -------------------------------------------------- | 119| 16000050 | Internal error. | 120| 28800001 | Startup task or its dependency not found. | 121| 28800002 | The startup tasks have circular dependencies. | 122| 28800003 | An error occurred while running the startup tasks. | 123| 28800004 | Running startup tasks timeout. | 124 125**示例:** 126 127```ts 128import { AbilityStage, startupManager, StartupListener, StartupConfig } from '@kit.AbilityKit'; 129import { hilog } from '@kit.PerformanceAnalysisKit'; 130import { BusinessError } from '@kit.BasicServicesKit'; 131 132export default class MyAbilityStage extends AbilityStage { 133 onCreate(): void { 134 hilog.info(0x0000, 'testTag', 'AbilityStage onCreate'); 135 let onCompletedCallback = (error: BusinessError<void>) => { 136 if (error) { 137 hilog.error(0x0000, 'testTag', 'onCompletedCallback error: %{public}s', JSON.stringify(error)); 138 } else { 139 hilog.info(0x0000, 'testTag', 'onCompletedCallback: success.'); 140 } 141 }; 142 let startupListener: StartupListener = { 143 'onCompleted': onCompletedCallback 144 }; 145 let config: StartupConfig = { 146 'timeoutMs': 10000, 147 'startupListener': startupListener 148 }; 149 150 try { 151 // 手动调用run方法 152 startupManager.run(['StartupTask_001', 'libentry_001'], this.context, config).then(() => { 153 hilog.info(0x0000, 'testTag', '%{public}s', 'startupManager.run success'); 154 }).catch((error: BusinessError<void>) => { 155 hilog.error(0x0000, 'testTag', 'startupManager.run promise catch error: %{public}s', JSON.stringify(error)); 156 }) 157 } catch (error) { 158 hilog.error(0x0000, 'testTag', 'startupManager.run catch error: %{public}s', JSON.stringify(error)); 159 } 160 } 161 // ... 162} 163``` 164 165## startupManager.removeAllStartupTaskResults 166 167removeAllStartupTaskResults(): void 168 169删除所有启动任务结果。 170 171如果存在so预加载任务,则将对应so文件置为未加载状态。对于缓存中已加载的so文件,不会被移除。 172 173**系统能力**:SystemCapability.Ability.AppStartup 174 175**示例:** 176 177```ts 178import { AbilityConstant, UIAbility, Want, startupManager } from '@kit.AbilityKit'; 179import { window } from '@kit.ArkUI'; 180import { hilog } from '@kit.PerformanceAnalysisKit'; 181import { BusinessError } from '@kit.BasicServicesKit'; 182 183export default class EntryAbility extends UIAbility { 184 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 185 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); 186 try { 187 startupManager.run(['StartupTask_001', 'libentry_001']).then(() => { 188 hilog.info(0x0000, 'testTag', 'StartupTask_001 init successful'); 189 }).catch((error: BusinessError) => { 190 hilog.error(0x0000, 'testTag', `StartupTask_001 promise catch failed, error: %{public}s`, 191 JSON.stringify(error) ?? ''); 192 }); 193 } catch (error) { 194 hilog.error(0x0000, 'testTag', `StartupTask_001.run failed, error: %{public}s`, JSON.stringify(error) ?? ''); 195 } 196 } 197 198 onWindowStageCreate(windowStage: window.WindowStage) { 199 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); 200 startupManager.removeAllStartupTaskResults(); // 移除所有启动任务结果 201 202 windowStage.loadContent('pages/Index', (err, data) => { 203 if (err.code) { 204 hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); 205 return; 206 } 207 hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); 208 }); 209 } 210} 211``` 212 213 214## startupManager.getStartupTaskResult 215 216getStartupTaskResult(startupTask: string): Object 217 218获取指定启动任务或so预加载任务的执行结果。 219 220**系统能力**:SystemCapability.Ability.AppStartup 221 222**参数:** 223 224 | 参数名 | 类型 | 必填 | 说明 | 225 | -------- | -------- | -------- | -------- | 226 | startupTask | string | 是 | 启动任务实现[StartupTask](./js-apis-app-appstartup-startupTask.md)接口的文件名或so文件名,所有启动任务都需要实现[StartupTask](./js-apis-app-appstartup-startupTask.md)接口的方法。 | 227 228**返回值:** 229 230 | 类型 | 说明 | 231 | -------- | -------- | 232 | Object | 输入为启动任务名时,返回指定的启动任务结果。<br/> 输入为so文件名时,返回undefined。 | 233 234**错误码:** 235 236以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。 237 238 | 错误码ID | 错误信息 | 239 | ------- | -------------------------------- | 240 | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 241 242**示例:** 243 244```ts 245import { AbilityConstant, UIAbility, Want, startupManager } from '@kit.AbilityKit'; 246import { window } from '@kit.ArkUI'; 247import { hilog } from '@kit.PerformanceAnalysisKit'; 248import { BusinessError } from '@kit.BasicServicesKit'; 249 250export default class EntryAbility extends UIAbility { 251 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 252 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); 253 try { 254 startupManager.run(['StartupTask_001']).then(() => { 255 hilog.info(0x0000, 'testTag', 'StartupTask_001 init successful'); 256 }).catch((error: BusinessError) => { 257 hilog.error(0x0000, 'testTag', `StartupTask_001 promise catch failed, error: %{public}s`, 258 JSON.stringify(error) ?? ''); 259 }); 260 } catch (error) { 261 hilog.error(0x0000, 'testTag', `StartupTask_001.run failed, error: %{public}s`, JSON.stringify(error) ?? ''); 262 } 263 } 264 265 onWindowStageCreate(windowStage: window.WindowStage) { 266 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); 267 let result = startupManager.getStartupTaskResult('StartupTask_001'); // 手动获取启动任务结果 268 hilog.info(0x0000, 'testTag', 'getStartupTaskResult result = %{public}s', result); 269 windowStage.loadContent('pages/Index', (err, data) => { 270 if (err.code) { 271 hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); 272 return; 273 } 274 hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); 275 }); 276 } 277} 278``` 279 280 281## startupManager.isStartupTaskInitialized 282 283isStartupTaskInitialized(startupTask: string): boolean 284 285获取指定启动任务或so预加载任务是否已初始化。 286 287**系统能力**:SystemCapability.Ability.AppStartup 288 289**参数:** 290 291 | 参数名 | 类型 | 必填 | 说明 | 292 | -------- | -------- | -------- | -------- | 293 | startupTask | string | 是 | 启动任务实现[StartupTask](js-apis-app-appstartup-startupTask.md)接口的类名称或so文件名称。 | 294 295**返回值:** 296 297 | 类型 | 说明 | 298 | -------- | -------- | 299 | boolean | 返回布尔值,true表示该启动任务或so预加载任务已执行完成,false表示该启动任务或so预加载任务尚未执行完成。 | 300 301**错误码:** 302 303以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。 304 305 | 错误码ID | 错误信息 | 306 | ------- | -------------------------------- | 307 | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 308 309**示例:** 310 311```ts 312import { AbilityConstant, UIAbility, Want, startupManager } from '@kit.AbilityKit'; 313import { window } from '@kit.ArkUI'; 314import { hilog } from '@kit.PerformanceAnalysisKit'; 315import { BusinessError } from '@kit.BasicServicesKit'; 316 317export default class EntryAbility extends UIAbility { 318 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 319 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); 320 try { 321 startupManager.run(['StartupTask_001', 'libentry_001']).then(() => { 322 hilog.info(0x0000, 'testTag', 'StartupTask_001 init successful'); 323 }).catch((error: BusinessError) => { 324 hilog.error(0x0000, 'testTag', `StartupTask_001 promise catch failed, error: %{public}s`, 325 JSON.stringify(error) ?? ''); 326 }); 327 } catch (error) { 328 hilog.error(0x0000, 'testTag', `StartupTask_001.run failed, error: %{public}s`, JSON.stringify(error) ?? ''); 329 } 330 } 331 332 onWindowStageCreate(windowStage: window.WindowStage) { 333 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); 334 let result1 = startupManager.isStartupTaskInitialized('StartupTask_001'); 335 let result2 = startupManager.isStartupTaskInitialized('libentry_001'); 336 if (result1) { 337 console.info('StartupTask_001 init successful'); 338 } else { 339 console.info('StartupTask_001 uninitialized'); 340 } 341 if (result2) { 342 console.info('libentry_001 init successful'); 343 } else { 344 console.info('libentry_001 uninitialized'); 345 } 346 347 windowStage.loadContent('pages/Index', (err, data) => { 348 if (err.code) { 349 hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); 350 return; 351 } 352 hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); 353 }); 354 } 355} 356``` 357 358## startupManager.removeStartupTaskResult 359 360removeStartupTaskResult(startupTask: string): void 361 362删除指定启动任务或so预加载任务的初始化结果。 363 364- 输入为启动任务名时,删除指定启动任务的初始化结果。 365 366- 输入为so文件时,将该so文件置为未加载,缓存中已加载的so文件不会被移除。 367 368**系统能力**:SystemCapability.Ability.AppStartup 369 370**参数:** 371 372 | 参数名 | 类型 | 必填 | 说明 | 373 | -------- | -------- | -------- | -------- | 374 | startupTask | string | 是 | 启动任务所实现[StartupTask](js-apis-app-appstartup-startupTask.md)接口的类名称或so文件名。 | 375 376**错误码:** 377 378以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。 379 380 | 错误码ID | 错误信息 | 381 | ------- | -------------------------------- | 382 | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 383 384**示例:** 385 386```ts 387import { AbilityConstant, UIAbility, Want, startupManager } from '@kit.AbilityKit'; 388import { window } from '@kit.ArkUI'; 389import { hilog } from '@kit.PerformanceAnalysisKit'; 390import { BusinessError } from '@kit.BasicServicesKit'; 391 392export default class EntryAbility extends UIAbility { 393 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 394 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); 395 try{ 396 startupManager.run(['StartupTask_001', 'libentry_001']).then(() => { 397 hilog.info(0x0000, 'testTag', 'StartupTask_001 init successful'); 398 }).catch((error: BusinessError) => { 399 hilog.error(0x0000, 'testTag', `StartupTask_001 promise catch failed, error: %{public}s`, 400 JSON.stringify(error) ?? ''); 401 }); 402 } catch (error) { 403 hilog.error(0x0000, 'testTag', `StartupTask_001.run failed, error: %{public}s`, JSON.stringify(error) ?? ''); 404 } 405 } 406 407 onWindowStageCreate(windowStage: window.WindowStage) { 408 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); 409 startupManager.removeStartupTaskResult('StartupTask_001'); 410 startupManager.removeStartupTaskResult('libentry_001'); 411 412 windowStage.loadContent('pages/Index', (err, data) => { 413 if (err.code) { 414 hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); 415 return; 416 } 417 hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); 418 }); 419 } 420} 421```