集成androidx startup库

介绍

Startup库提供了一种简单、高效的方法来初始化启动组件. 它利用 ContentProvider 的初始化原理, 封装了一个 ContentProvider 实现类, 在其 onCreate() 函数中实现组件的初始化. 这样就避免了在 Application 进行初始化.

下面是Android项目集成Startup的步骤.

1. 添加依赖

在module的 build.gradle 文件中添加以下内容.

1
2
3
dependencies {
implementation "androidx.startup:startup-runtime:1.1.1"
}

2. 创建初始化类

在module中添加初始化实现类.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import android.content.Context
import androidx.startup.Initializer

class ModuleInitializer : Initializer<Any> {
/**
* @param context is ApplicaitonContext
* @return 返回值将传递给依赖它的其他组件
*/
override fun create(context: Context): Any {
// 添加初始化代码
Module.initialize(context)
return Any()
}
/**
* 返回module依赖的库初始化类
*/
override fun dependencies(): MutableList<Class<out Initializer<*>>> {
return ArrayList()
}
}

3. 配置组件

在module的 AndroidManifest.xml 文件的 application 标签下添加以下内容.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<manifest
<application>
<!-- 固定写法 -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<!-- 替换为上面的初始化类 -->
<meta-data
android:name=".ModuleInitializer"
android:value="androidx.startup" />
</provider>
</application>
</manifest>

4. 手动初始化(可选)

为单个组件停用自动初始化功能.

1
2
3
4
5
6
7
8
9
10
11
12
13
<manifest
<application>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data
android:name=".ModuleInitializer"
tools:node="remove" />
</provider>
</application>
</manifest>

为所有组件停用自动初始化功能

1
2
3
4
5
6
7
8
<manifest
<application>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
</application>
</manifest>

通过代码初始化.

1
2
AppInitializer.getInstance(context)
.initializeComponent(ModuleInitializer::class.java)

官方文档

作者

王文辉

发布于

2024-11-14

更新于

2024-11-15

许可协议