不幸的是,不可能有多个Application
类,但有一些变通方法,具体取决于您要执行的操作。
Android 应用程序只能有一个Application
用作应用程序上下文的子类。
这是因为Context
应用程序中的每个对象都有一个对它的引用,可以通过getApplicationContext()
. 没有提供多个应用程序上下文,也没有办法指定您想要“库应用程序上下文”还是“主应用程序上下文”。
假设您要做的是在应用程序启动时初始化库,您可以简单地创建一个空ContentProvider
的 that'sandroid:exported="false"
并在其onCreate
方法中进行初始化。这将在应用程序的Application.onCreate
.
<provider
android:name="com.my.library.MyLibraryInitializer"
android:authorities="${applicationId}.mylibrary-initializer"
android:exported="false"/>
public class MyLibraryInitializer extends ContentProvider {
@Override
public boolean onCreate() {
// perform your initialization here
return true;
}
// Everything below here is just boilerplate to implement the abstract methods
// in ContentProvider, no need to change it
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
@Override
public String getType(Uri uri) {
return null;
}
}
例如,这就是 WorkManager 初始化自身所做的事情:它在其清单中声明一个提供程序,并在that 的方法中执行其初始化onCreate
ContentProvider
。