Android WorkManager ListenableWorker实现:找不到ListenableFuture接口

时间:2019-08-01 10:41:30

标签: android android-architecture-components android-workmanager

我正在尝试实现startWork() ListenableWorker返回com.google.common.util.concurrent.ListenableFuture接口的Android method,但是最后一个不可用。另外,我需要com.google.common.util.concurrent.SettableFuture实现,但该实现也不可用。我应该包括哪个模块以使这些类型可用?

app.gradle

...
dependencies {
    ...
    implementation "androidx.work:work-runtime-ktx:2.1.0"
}

MyWorker.kt

class SendRegistrationTokenWorker(
    context: Context,
    params: WorkerParameters,
) : ListenableWorker(context, params) {
   override fun startWork(): ListenableFuture<Result> { ... }
}

据我了解,我想要的依赖项是com.google.guava:listenablefuture:1.0,但是androidx.work:work-runtime-ktx:2.1.0已经依赖于它,以及该应用程序使用的其他库。问题是com.google.guava:listenablefuture:1.0解析为com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava,它不包含必需的类型,它只是一个模拟依赖项。

我尝试添加单独的com.google.guava:listenablefuture:1.0依赖关系,但它也解析为com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava并且没有任何变化。

如果我将listenablefuture版本强制为1.0,则会收到错误消息:

  

程序类型已经存在:   com.google.common.util.concurrent.ListenableFuture

android {
    ...
    configurations.all {
        resolutionStrategy {
            force "com.google.guava:listenablefuture:1.0"
        }
    }
}
...

1 个答案:

答案 0 :(得分:1)

最后,我找到的最简单的解决方案是将整个番石榴依赖项添加到项目中。我不确定这是正确的方法,因为我仅使用库中的几种类型。但是,这是我正在寻找的简单解决方案。

build.gradle

dependencies {
   ...
   implementation 'com.google.guava:guava:28.0-android'
}

我还找到了Threading in ListenableWorker个关于ListenableWorker实现的Android文档部分,如果该应用程序不使用番石榴,则建议使用councurrent-futures CallbackToFutureAdapter。我尝试过,但是解决方案无法解决错误,找不到ListenableFuture