它太重了,减少了一行初始化代码,却增加了多余的性能开销,当很多库都这样做的话,性能消耗将会很多。来看下下面这个Google官方统计的图:
在不断加入空的 ContentProvider 组件的情况下,启动耗时会线性增加,这还是没有加上那些初始化的代码。
所以在库增多时,我宁愿在 Application 写那一行 .init()
,也不情愿再加 ContentProvider 了。
App Startup
的出现,就是为了解决这一个问题。
这样再去看他的定义就很简单理解了,它能做的事情是:
- 将所有 ContentProvider 合并到一个 ContentProvider,这样可以减少 ContentProvider 的数量,间接减少启动耗时
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
- 可以对这些要初始化的组件排序执行
这也说明了啥?如果你的 App 或 SDK库 没有大量出现上面这种,使用 ContentProvider 来初始化的,那么 App Startup并不会降低启动耗时
==================================================================================
因为 App Startup
需要有使用到 ContentProvider 做初始化的场景,所以我们需要模拟那种使用 ContentProvider 做初始化的库。这里我选择使用官方文档中使用的 WorkManager
,在项目中导入:
dependencies {
def work_version = “2.4.0”
implementation “androidx.work:work-runtime:$work_version”
implementation “androidx.work:work-runtime-ktx:$work_version”
}
然后我们可以在 WorkManager 的jar包中找到他的 AndroidManifest.xml
,这里面就有 <provider>
标签:
可以看下 WorkManagerInitializer
的代码:
public class WorkManagerInitializer extends ContentProvider {
@Override
public boolean onCreate() {
// 初始化操作
WorkManager.initialize(getContext(), new Configuration