启动框架应用场景
大型应用在启动过程中会加载大量的模块或SDK,各个模块或SDK还有依赖,模块或SDK加载要有一套管理机制,否则会杂乱无章,都耦合在一起,进而会影响启动性能。
AppStartup提供在应用启动时初始化组件的简单而高效的方法。
- 更好管理应用程序初始化过程,避免出现初始化错误、重复初始化等问题。
- 提高应用程序的启动速度和用户体验。
启动流程介绍(自动模式)
自动模式下启动框架的执行顺序在创建AbilityStage和执行AbilityStage onCreate回调之间。
那启动框架内的任务执行顺序是什么样子呢? 基于以下配置,进行任务时序分析。
注意:
- configEntry是启动框架初始化组件的全局配置入口函数。主要包括 【执行所有组件初始化的超时时间】 和 【表示启动框架的监听器,该监听器将在所有组件初始化完成时调用】。
- startupTasks配置中的 srcEntry 表示 需要加载的组件实现的入口函数。
以下是startup_config.json文件中的配置。
{
"startupTasks": [
{
"name": "StartupTask_001",
"srcEntry": "./ets/Startup2/StartupTask_001.ets",
"dependencies": []
},
{
"name": "StartupTask_002",
"srcEntry": "./ets/Startup2/StartupTask_002.ets",
"dependencies": [
"StartupTask_001"
]
}
],
"configEntry": "./ets/Startup2/StartupConfig.ets"
}
场景以及解决方案
场景介绍
在开发应用的时候,一般都会引入SDK,而大部分SDK都要求我们在Application启动前初始化,当我们引入的SDK越来越多,就会出现Application启动时间越来越长,如果SDK的初始化任务相互依赖,还要处理很多条件判断。如果都在主线程按照顺序初始化,或者再加上异步初始化。那APP的启动性能就会非常差。
举例: xx银行应用初始化模块加载,广告模块、人脸识别模块、APM模块、配置中心模块、数据管理模块、静态配置模块、H5灰度模块、首页加载模块、启动模块、定位模块、日志模块、登录模块、网络模块、离线模块、弹屏模块、隐私模块、推送模块、路由模块、安全模块、埋点模块、音视频模块、银联支付模块、url安全校验模块、用户中心模块、设备管理模块、X5初始化模块。
优势:减少手动加载的错误率。
配置启动框架AppStartup,应用启动时初始化组件。
SDK/组件/任务 依赖关系 如下图所示:
最终发现组件的加载顺序为:1->2->4->3->5。