implementation “androidx.startup:startup-runtime:1.0.0”
}
第二步:自定义实现 Initializer 类
主要有两个方法
-
T create(@NonNull Context context)
初始化一个组件,返回给 Application -
List<Class<? extends Initializer<?>>> dependencies()
当前的 Initializer 依赖于哪些 Initializers,通过这个可以确定先后启动的顺序
我们以官方的例子来讲解
// Initializes WorkManager.
class WorkManagerInitializer : Initializer {
override fun create(context: Context): WorkManager {
val configuration = Configuration.Builder().build()
WorkManager.initialize(context, configuration)
return WorkManager.getInstance(context)
}
override fun dependencies(): List<Class<out Initializer<*>>> {
// No dependencies on other libraries.
return emptyList()
}
}
WorkManagerInitializer 返回一个 WorkManager,它不需要依赖于其他的 Initializer,直接返回 emptyList() 即可。
如果需要依赖其他的 Initializer,重写 dependencies 方法,返回即可。如下面的 ExampleLoggerInitializer 依赖于 WorkManagerInitializer
// Initializes ExampleLogger.
class ExampleLoggerInitializer : Initializer {
override fun create(context: Context): ExampleLogger {
// WorkManager.getInstance() is non-null only after
// WorkManager is initialized.
return ExampleLogger(WorkManager.getInstance(context))
}
override fun dependencies(): List<Class<out Initializer<*>>> {
// Defines a dependency on WorkManagerInitializer so it can be
// initialized after WorkManager is initialized.
return listOf(WorkManagerInitializer::class.java)
}
}
class ExampleLogger(val workManager: WorkManager){
}
第三步:在 AndroidManifest 里面配置自定义的 InitializationProvider
<provider
android:name=“androidx.startup.InitializationProvider”
android:authorities=“${applicationId}.androidx-startup”
android:exported=“false”
tools:node=“merge”>
<meta-data android:name=“com.xj.anchortask.appstartup.ExampleLoggerI