gpt4 book ai didi

android - 工作管理器 : How to set-up different WorkManager Configurations in same App

转载 作者:行者123 更新时间:2023-12-04 14:16:19 25 4
gpt4 key购买 nike

我正在开发一个多模块项目(Gradle 模块)。我在我的模块中使用 WorkManager。我也在使用 Dagger 进行依赖注入(inject)。
现在我必须使用 dagger 将依赖项注入(inject)我的 WorkManager。我对使用 WorkManager 设置 Dagger 2 非常熟悉。但我面临的问题是,我必须使用
worker 工厂使其与 Dagger 兼容。这样我就可以在 Dagger Multi 绑定(bind)的帮助下注入(inject)依赖项。但是目前主模块(Main app gradle module)中的WorkManager配置是

      public Configuration getWorkManagerConfiguration() {
return new Configuration.Builder()
.setMinimumLoggingLevel(android.util.Log.INFO)
.build();
}

哪个不使用自定义工厂。并且已经有几个其他模块(用于其他功能的 gradle 模块)在没有工厂的情况下使用 WorkManger。现在,如果我更改此配置并添加一个工厂,它可能会破坏其他几个地方的工作管理器设置。我可以只为模块中的 WorkManager 类使用工厂吗(或者只有一些工作管理器类应该通过工厂初始化,其他的使用默认配置)。有可能吗?希望我的问题很清楚。

最佳答案

您可以使用 DelegatingWorkerFactory add你是它的自定义 WorkerFactory。

您的自定义 WorkerFactory 将需要检查传递给工厂的类名是否是它要处理的类名,如果不是,则返回 nullDelegatingWorkerFactory将使用反射恢复到默认的 worker 工厂。

请记住,每次初始化 WorkManager 时都需要添加自定义的 WorkerFactory。如果您不这样做并且 WorkManager 尝试为您的 Worker 填充 WorkRequest(通常由自定义 WorkerFactory 处理),它将回退到默认的 WorkerFactory 并失败(可能出现类未找到异常)。

我们正在使用 DelegatingWorkerFactoryIOsched ,用于 I/O 和 Android 开发者峰会的调度应用程序。
您的自定义 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
}
}
}

关于android - 工作管理器 : How to set-up different WorkManager Configurations in same App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59942384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com