Jetpack-App Startup

·  阅读 1128

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)
复制代码

学习总结

  1. App Startup 组件通过单一 Provider 用来初始化所有三方组件,以提高启动速度
  2. 可以通过配置 tools:node="remove" 禁用组件提高启动速度
  3. 支持手动初始化组件

相关链接

官方指南

本文使用 mdnice 排版

分类:
Android
标签:
分类:
Android
标签: