有什么用?
应用启动时初始化组件。
怎么用
添加依赖
dependencies {implementation "androidx.startup:startup-runtime:1.1.1"
}
创建类,继承Initializer。
public class AppInit implements Initializer<String> {@NonNull@Overridepublic String create(@NonNull Context context) {UMConfigure.init(context, Constant.UMENG_KEY, "", UMConfigure.DEVICE_TYPE_PHONE, "");return "APP INIT";}@NonNull@Overridepublic List<Class<? extends Initializer<?>>> dependencies() {return new ArrayList<>();}
}
create()初始化组件
dependencies() 返回初始化程序所依赖的其他 Initializer列表。返回空列表,表示没有依赖。
如果有依赖,添加到列表。这样初始化A,就要先初始化B。
public class AInitializer implements Initializer<String> {@NonNull@Overridepublic String create(@NonNull Context context) {//.....return "A";}@NonNull@Overridepublic List<Class<? extends Initializer<?>>> dependencies() {return Arrays.asList(BInitializer.class);}
}
配置provider
<providerandroid:name="androidx.startup.InitializationProvider"android:authorities="${applicationId}.androidx-startup"android:exported="false"tools:node="merge"><!-- This entry makes ExampleLoggerInitializer discoverable. --><meta-data android:name="cn.jn.mytest.init.AppInit "android:value="androidx.startup" /></provider>
启动应用的时候,就会自动初始化组件。
但这不是我们想要的,一般情况下,会先检测是否同意隐私协议,之后,再做处理,这个时候就需要手动初始化组件。
手动初始化组件,需要停用自动初始化功能。
<providerandroid:name="androidx.startup.InitializationProvider"android:authorities="${applicationId}.androidx-startup"tools:node="remove" />
手动初始化
AppInitializer.getInstance(context).initializeComponent(AppInit .class);