众所周知kotlin协程写异步流非常方便。
今日在刷公众号的时候,看到关于在Application.onCreate()
加载框架耗时优化的文章,搜了些相关文章。
思路大概是:
- 建立有向无环图
- 建立线程池,可以同时加载多个框架
- 单个框架加载完成后,对依赖此框架的加载项解一次锁
- 后续的框架查询是否前置依赖已经完成
- 所有依赖完成后释放所有锁
onCreate()
完成
分析
- 采用
Thread
实现同时加载多个框架(这很不kotlin) - 是否可以采用协程来进行这样的优化
方案思考
- 协程中有
ansyc
await
runBlocking
- 有前置依赖的项目在其自己的
ansyc
前先await
前置依赖
实践
class App : Application() {
override fun onCreate() {
super.onCreate()
initEnd("Start")
runBlocking {
val taskA = async { initA() }
val taskB = async { initB() }
val taskCWaitA = async {
taskA.await()
initC()
}
val taskDWaitBC = async {
taskB.await()
taskCWaitA.await()
initD()
}
}
}
private fun initA()
private fun initB()
private fun initC()
private fun initD()
}
数据对比&总结
这暂时只是一个思路,目前用到的项目还没用到很多加载很耗时的框架,更没有线上数据做支撑。
这个方案用到了kotlin协程的特性,不需要额外封装,没有附加的依赖,代码可读性也很强,个人认为还是很好的一个方法,等后续有数据可以验证后再下定论。
Q.E.D.