WorkManager-当我们同时使用默认初始化和自定义初始化时,是否应该删除默认初始化程序?

问题描述 投票:5回答:3

当我将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版本开始引入了“按需初始化”。

根据https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration#remove-default

我不确定,在我的AndroidManifest.xml中添加以下内容是否正确。

<provider
    android:name="androidx.work.impl.WorkManagerInitializer"
    android:authorities="${applicationId}.workmanager-init"
    tools:node="remove" />

当前,以下是我的Application类。

MyApplication类
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();
    }
}

我如何构造WorkManager
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 ...

android androidx android-workmanager
3个回答
0
投票

我们在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始终


2
投票

是,如果要使用ContentProvider,则需要像删除默认工作管理器初始化程序一样,因此,在清单中保留以下代码:


0
投票

kotlin用于为WorkManagerInitializer提供上下文。发生这种情况是因为内容提供者在WorkManager之前初始化(请参见Application)。因此,如果您进行自定义初始化,则需要自己提供上下文。因此,如果您使用自定义初始化,则不需要它。


-1
投票

正如我曾经public class MyContentProvider extends ContentProvider { @Override public boolean onCreate() { WorkManager workManager = getWorkManager(getContext()); ... } ... } 一样,在禁用默认初始化程序时,需要注册另一个初始化程序:

© www.soinside.com 2019 - 2024. All rights reserved.