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