我正在做一个多模块项目(Gradle模块)。我在我的模块中使用WorkManager。我也在使用Dagger进行依赖注入。现在,我必须使用dagger向我的WorkManager注入依赖项。我对WorkManager中的Dagge2设置非常熟悉。但我面临的问题是,我必须使用worker factory来使其与dagger兼容。这样我就可以在Dagger Multi bindings的帮助下注入依赖项。但是目前主模块(主应用gradle模块)中的WorkManager配置是
public Configuration getWorkManagerConfiguration() {
return new Configuration.Builder()
.setMinimumLoggingLevel(android.util.Log.INFO)
.build();
}它不使用定制工厂。而且已经有几个其他模块(gradle模块的其他功能)正在使用WorkManger,而不需要工厂。现在,如果我更改此配置并添加一个工厂,可能会破坏其他几个地方的工作管理器设置。我只能为模块中的WorkManager类使用工厂吗(或者只有一些工作管理器类应该通过工厂初始化,其他的使用默认配置)。有可能这样做吗?希望我的问题清楚了。
发布于 2020-01-28 15:36:48
您可以使用DelegatingWorkerFactory和add,您可以自定义它的WorkerFactory。
您的自定义WorkerFactory将需要检查传递到工厂的类名是否是它想要处理的类名,如果不是,只需返回null,DelegatingWorkerFactory将使用反射恢复到默认的工人工厂。
请记住,每次初始化WorkManager时都需要添加自定义WorkerFactory。如果您不这样做,而WorkManager试图为您的Worker填充WorkRequest (通常由自定义WorkerFactory处理),它将回退到默认的WorkerFactory并失败(可能会出现类未找到异常)。
我们正在使用IOsched中的DelegatingWorkerFactory,这是用于I/O和安卓开发者峰会的调度应用程序。您的自定义WorkerFactory的代码将类似于:
class ConferenceDataWorkerFactory(
private val refreshEventDataUseCase: RefreshConferenceDataUseCase
) : WorkerFactory() {
override fun createWorker(
appContext: Context,
workerClassName: String,
workerParameters: WorkerParameters
): ListenableWorker? {
return when (workerClassName) {
ConferenceDataWorker::class.java.name ->
ConferenceDataWorker(appContext, workerParameters, refreshEventDataUseCase)
else ->
// Return null, so that the base class can delegate to the default WorkerFactory.
null
}
}
}https://stackoverflow.com/questions/59942384
复制相似问题