当我将WorkManager从“ 2.2.0”升级到“ 2.3.0-rc01”时,出现以下新错误:>
导出APK时发生错误。
C:\app: Error: Remove androidx.work.impl.WorkManagerInitializer from your AndroidManifest.xml when using on-demand initialization. [RemoveWorkManagerInitializer] Explanation for issues of type "RemoveWorkManagerInitializer": If an android.app.Application implements androidx.work.Configuration.Provider, the default androidx.work.impl.WorkManagerInitializer needs to be removed from the AndroidManifest.xml file.
我不确定为什么在2.2.0中没有得到这样的错误,因为从2.1.0版本开始引入了“按需初始化”。
我不确定,在我的AndroidManifest.xml
中添加以下内容是否正确。
<provider android:name="androidx.work.impl.WorkManagerInitializer" android:authorities="${applicationId}.workmanager-init" tools:node="remove" />
当前,以下是我的
Application
类。
public class MyApplication extends MultiDexApplication implements Configuration.Provider {
private static MyApplication me;
@Override
public void onCreate() {
super.onCreate();
me = this;
}
public static MyApplication instance() {
return me;
}
@NonNull
@Override
public Configuration getWorkManagerConfiguration() {
return new Configuration.Builder()
.build();
}
}
public static WorkManager getWorkManager() {
MyApplication myApplication = MyApplication.instance();
if (myApplication == null) {
// Very rare edge case. Not sure how it happens. But, it happens :)
return WorkManager.getInstance();
} else {
return WorkManager.getInstance(myApplication);
}
}
[[0]类为null时,似乎也极有可能执行“默认初始化”(WorkManager.getInstance()
)。
通过添加以下Application
,我可以轻松消除APK导出过程中的错误。但是,这样做是否正确?
provider
我将WorkManager从“ 2.2.0”升级到“ 2.3.0-rc01”时收到以下新错误,当我导出APK时发生错误。 C:\ app:错误:删除androidx.work.impl.WorkManagerInitializer ...
我们在WorkManager <provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />
中引入了此棉绒规则。我们正在尝试使用此Lint规则解决的问题是,如果您同时具有2.3.0-*
WorkManagerInitializer
和您的ContentProvider
子类型都实现了Application
(用于按需初始化),则Configuration.Provider
将始终
是,如果要使用ContentProvider
,则需要像删除默认工作管理器初始化程序一样,因此,在清单中保留以下代码:
kotlin用于为WorkManagerInitializer
提供上下文。发生这种情况是因为内容提供者在WorkManager
之前初始化(请参见Application
)。因此,如果您进行自定义初始化,则需要自己提供上下文。因此,如果您使用自定义初始化,则不需要它。
正如我曾经public class MyContentProvider extends ContentProvider {
@Override
public boolean onCreate() {
WorkManager workManager = getWorkManager(getContext());
...
}
...
}
一样,在禁用默认初始化程序时,需要注册另一个初始化程序: