无法在WorkManager中设置自定义工人工厂

时间:2018-10-08 10:44:05

标签: android android-workmanager

我使用以下代码来设置自己的工人工厂:

val daggerWorkerFactory = DaggerWorkerFactory(toInjectInWorker)

val configuration = Configuration.Builder()
        .setWorkerFactory(daggerWorkerFactory)
        .build()

WorkManager.initialize(context, configuration)

执行此代码后,我可以获得WorkManager实例:

val workManager = WorkManager.getInstance()

问题在于,在此之后创建的每个工作人员都不会使用我的工厂。而是使用默认工厂。

我可以在API文档中看到方法“ WorkManager.initialize”具有注释:

  

在清单中禁用androidx.work.impl.WorkManagerInitializer

我找不到有关如何执行此操作的任何信息。这是在某些较旧版本的WorkManager上,他们忘记从文档中删除还是真的有必要吗?如果可以,怎么办?

1 个答案:

答案 0 :(得分:8)

摘自size_t

的文档
  

默认情况下,不应调用此方法,因为WorkerManager.initialize()是   自动初始化。要自己初始化WorkManager,请   请按照以下步骤操作:

     

在清单中禁用WorkManager   androidx.work.impl.WorkManagerInitializerApplication#onCreate,请在调用此方法之前   呼叫ContentProvider

因此,您需要在清单文件中禁用getInstance()

WorkManagerInitializer

然后在您的自定义 <application //... android:name=".MyApplication"> //... <provider android:name="androidx.work.impl.WorkManagerInitializer" android:authorities="your-packagename.workmanager-init" android:enabled="false" android:exported="false" /> </application> 类中,初始化Application

WorkerManager

注意:

默认情况下,class MyApplication : Application() { override fun onCreate() { super.onCreate() val daggerWorkerFactory = DaggerWorkerFactory(toInjectInWorker) val configuration = Configuration.Builder() .setWorkerFactory(daggerWorkerFactory) .build() WorkManager.initialize(context, configuration) } } 将添加一个名为WorkerManager的{​​{1}},其权限设置为ContentProvider

如果您在禁用WorkerManagerInitializer时在清单文件中传递了错误的权限,则Android将无法编译清单。