IllegalStateException:WorkManager已经初始化 [英] IllegalStateException: WorkManager is already initialized
问题描述
具有以下依赖性:
dependencies {
implementation "androidx.work:work-runtime:2.0.1"
androidTestImplementation "androidx.work:work-testing:2.0.1"
}
第二次运行此代码时:
Configuration config = new Configuration.Builder().build();
WorkManager.initialize(getApplicationContext(), config);
this.workManager = WorkManager.getInstance();
我收到此错误消息:
java.lang.IllegalStateException: WorkManager is already initialized.
Did you try to initialize it manually without disabling WorkManagerInitializer?
See WorkManager#initialize(Context, Configuration) or the class level Javadoc for more information.
并且还会在本机端抛出分段错误:
and it also throws a segmentation fault on the native side:
A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR),
fault addr 0x878 in tid 10892 (ova.workmanager),
pid 10892 (ova.workmanager)
这将是WorkManager#initialize(Context, Configuration)
的文档.
目的是为了防止在手动初始化过程中发生崩溃(以更改日志级别).如何禁用WorkManagerInitializer
?如果可能的话,我不想使用static
关键字.
The intent is to prevent the crash during manual initialization (in order to change the log level). How to disable the WorkManagerInitializer
? If possible, I do not want to use the static
keyword.
推荐答案
这是替换提供商androidx.work.impl.WorkManagerInitializer
的方法:
This is how to substitute provider androidx.work.impl.WorkManagerInitializer
:
<application>
...
<!-- disable default provider -->
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
android:exported="false"
android:enabled="false"/>
<!-- register custom provider -->
<provider
android:name=".CustomWorkManagerInitializer"
android:authorities="${applicationId}.WorkManagerInit"/>
</application>
来源:自定义工作管理器初始化(在Kotlin中)
Source: Custom Work Manager initialization (in Kotlin).
除非注册其他提供者,否则将给出:
Unless registering another provider, this gives a:
java.lang.IllegalStateException: WorkManager is not initialized properly. The most
likely cause is that you disabled WorkManagerInitializer in your manifest but forgot
to call WorkManager#initialize in your Application#onCreate or a ContentProvider.
src/debug/Manifest.xml
中注册的ContentProvider
:
public class WorkManagerInit extends ContentProvider {
@Override
public boolean onCreate() {
if(getContext() != null) {
Configuration config = new Configuration.Builder().build();
WorkManager.initialize(getContext().getApplicationContext(), config);
}
return true;
}
...
}
这篇关于IllegalStateException:WorkManager已经初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!