IllegalStateExceptionが:ワークマネージャは、すでに初期化されています

マーティンZeitler氏:

これらの依存関係を持ちます:

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.

そしてそれはまた、ネイティブ側のセグメンテーションフォールトをスローします。

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キーワードを。

マーティンZeitler氏:

これは、プロバイダを代用する方法です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で)。


別のプロバイダを登録していない限り、これができます:

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.

ContentProviderに登録src/debug/Manifest.xml

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;
    }
    ...
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=182967&siteId=1