上面我们讲解了 AppStartUp 的基本使用步骤,如果我们不想在 Application onCreate 之前执行我们的 ExampleLoggerInitializer,要怎么使用呢?
其实很简单,
-
第一步,在 AndroidManifest InitializationProvider 中移除 移除 <meta-data 标签
-
在代码中调用 AppInitializer initializeComponent 方法初始化
1<provider
2 android:name=“androidx.startup.InitializationProvider”
3 android:authorities=“${applicationId}.androidx-startup”
4 android:exported=“false”
5 tools:node=“merge”>
6
7
1AppInitializer.getInstance(context).initializeComponent(ExampleLoggerInitializer::class.java)
App start up 源码分析
我们首先来看一下他的结构,只有简单的几个类
Initializer这个接口就没有必要说了,很简单,只有两个方法。
InitializationProvider 继承了 ContentProvider,借助了 ContentProvider 会在 Application onCreate 之前执行的特点。来执行一些初始化操作。
1public final class InitializationProvider extends ContentProvider {
2 @Override
3 public boolean onCreate() {
4 Context context = getContext();
5 if (context != null) {
6 AppInitializer.getInstance(context).discoverAndInitialize();
7 } else {
8 throw new StartupException(“Context cannot be null”);
9 }
10 return true;
11 }
12
13 ----
14
15}
我们可以看到在 onCreate 方法中调用 AppInitializer discoverAndInitialize 方法进行初始化。
-
找到 AndroidManifest InitializationProvider 下的 meta 便签
-
判断 meta 便签下 value 的值是不是 androidx.startup