引入原因(背景)
ContentProvider Android四大组件使用的较少的组件,主要功能是应用间的数据共享,LeakCanary 在这里用到的却并不是这个功能,而只是它生命周期的一部分。
如此便实现了库自动初始化的效果,这种巧妙的方案有啥缺点不呢?
因为 ContentProvider 属于四大组件之一,属于重量级了,google 官方给出的测试结果:在一台搭载Android 10系统的Pixel2手机上一个空的ContentProvider大约会占用2ms的耗时,随着ContentProvider的增加,耗时也会跟着一起增加。如果你的应用程序中使用了50个ContentProvider,那么将会占用接近20ms的耗时。
这么看来这种方案虽然简化了库接入着的操作,却增加了珍贵的启动时长,为了解决这个问题,引入了 Startup
Startup 虽然同样是使用 ContentProvider 来进行库的初始化,但是会将应用中所有接入了Startup 的库的操作通过 <provider> <meta-data>
合并到一个 ContentProvider 中进行初始化。
使用方式
定义初始化方法 UtilInitializer
AndroidManifest 配置
兼容性
在需要手动初始化的地方调用 AppInitializer.getInstance(context).initializeComponent(UtilInitializer::class.java)
即可