我使用以下代码来设置自己的 worker 工厂:
val daggerWorkerFactory = DaggerWorkerFactory(toInjectInWorker)
val configuration = Configuration.Builder()
.setWorkerFactory(daggerWorkerFactory)
.build()
WorkManager.initialize(context, configuration)
执行此代码后,我可以获取WorkManager实例:
val workManager = WorkManager.getInstance()
问题在于,对于在此之后创建的每个工作人员,从未使用过我的工厂。而是使用默认工厂。
我可以在API文档中看到方法“WorkManager.initialize”有一个注释:
我找不到有关如何执行此操作的任何信息。这是在某些较旧版本的WorkManager上,他们忘了从文档中删除吗,或者这真的有必要吗?如果是这样,怎么办?
最佳答案
从WorkerManager.initialize()
的文档
因此,您需要在 list 文件中禁用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
将添加一个名为ContentProvider
的WorkerManagerInitializer
,其权限设置为my-packagename.workermanager-init
。如果您在禁用
WorkerManagerInitializer
时在 list 文件中传递了错误的权限,则Android将无法编译 list 。关于android - 无法在WorkManager中设置自定义 worker 工厂,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52700557/