AppStartup 是 Jetpack 组件之一
解决的问题: 一个 Provider 统一初始化所有第三方库,提高 app 启动速度.
dependencies {
implementation "androidx.startup:startup-runtime:1.0.0-alpha01"
}
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) } } 复制代码
<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> 复制代码
有时候,某些组件我们初始化的时候用不上,这时候可以延迟初始化已提高启动速度
禁用单个组件初始化
<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" /> 复制代码
AppInitializer.getInstance(context) .initializeComponent(ExampleLoggerInitializer::class.java) 复制代码
官方指南
本文使用 mdnice 排版