我的应用程序中有 2 个 workManager 工作人员。我为数据库操作DatabaseSyncWorker添加了一个新的worker。数据库同步工作线程需要一个额外的参数作为 DI 的一部分。所以我创建了一个workerFactory类来注入额外的参数。但现在每次我调用任何其他工作人员时,我只获得 DatabaseSyncWorker 实例。如何获取其他worker的实例?我在不同的时间点调用它们。他们是相互独立的
My Factory
class DBSyncWorkerFactory @Inject constructor(private val dao: Dao): WorkerFactory() {
override fun createWorker(
appContext: Context,
workerClassName: String,
workerParameters: WorkerParameters
): ListenableWorker = PolicyWorker(dao, appContext, workerParameters)
}
我的 DB Worker 的 WorkManager 初始化
WorkManager.getInstance(App.context).enqueueUniqueWork(
tag,
ExistingWorkPolicy.APPEND,
OneTimeWorkRequestBuilder<DBSyncWorker>().build
)
我的networkSyncWorker的workmanager初始化
WorkManager.getInstance(App.context).enqueueUniqueWork(
tag,
ExistingWorkPolicy.APPEND,
OneTimeWorkRequestBuilder<NetworkSyncWorker>().build
)
我找到了解决方案。必须使用
workerClassName
来区分类名。解决方法如下
class DBSyncWorkerFactory @Inject constructor(private val dao: Dao): WorkerFactory() {
override fun createWorker(
appContext: Context,
workerClassName: String,
workerParameters: WorkerParameters
): ListenableWorker? {
return when(workerClassName){
DBSyncWorker::class.java.name -> DBSyncWorker(dao, appContext, workerParameters)
NetworkSyncWorker::class.java.name -> NetworkSyncWorker(appContext,workerParameters)
else ->
// Null will fall back to the default factory that uses reflection
null
}
}