Jetpack-App Startup
前言
AppStartup 是 Jetpack 组件之一
解决的问题: 一个 Provider 统一初始化所有第三方库,提高 app 启动速度.
使用
1.添加依赖
dependencies {
implementation "androidx.startup:startup-runtime:1.0.0-alpha01"
}
2.创建 Initializer
class ExampleLoggerInitializer : Initializer<ExampleLogger> {
override fun create(context: Context): ExampleLogger {
// 因为依赖了 WorkManagerInitializer,所以这里 WorkManager 已经初始化完成
return ExampleLogger(WorkManager.getInstance(context))
}
override fun dependencies(): List<Class<out Initializer<*>>> {
// 指定 ExampleLoggerInitializer 初始化依赖 WorkManagerInitializer
// 简单来说就是返回的 WorkManagerInitializer 先于 ExampleLoggerInitializer 初始化
return listOf(WorkManagerInitializer::class.java)
}
}
3.配置 Manifest
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<!-- 配置的 meta-data 的作用是让 InitializationProvider 发现我们第二步创建的 ExampleLoggerInitializer-->
<meta-data android:name="com.example.ExampleLoggerInitializer"
android:value="androidx.startup" />
</provider>
4.延迟初始化(禁用组件初始化)
有时候,某些组件我们初始化的时候用不上,这时候可以延迟初始化已提高启动速度
禁用单个组件初始化
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data android:name="com.example.ExampleLoggerInitializer"
tools:node="remove" />
</provider>
禁用所有组件初始化
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
5.手动初始化
AppInitializer.getInstance(context)
.initializeComponent(ExampleLoggerInitializer::class.java)
学习总结
- App Startup 组件通过单一 Provider 用来初始化所有三方组件,以提高启动速度
- 可以通过配置 tools:node="remove" 禁用组件提高启动速度
- 支持手动初始化组件
相关链接
本文使用 mdnice 排版