如何使用工作管理器 2.0 返回 ListenableFuture<Result>?

A.S*_*.SD 4 android android-workmanager androidx

似乎 ListenableWorker 不再具有 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 限制,但是我无法弄清楚或找到有关如何在我覆盖的 startWork() 函数中正确返回 ListenableFuture< Result> 的示例。

据我所知,唯一的选择是返回一个 SettableFuture.create<Result>() 但这仍然需要抑制“RestrictedApi”警告/错误。

有人知道更简单的方法吗?

编辑:据我所知,这是使用 CallbackToFutureAdapter.Completer 的方法

override fun startWork(): ListenableFuture<Result> {
    return CallbackToFutureAdapter.getFuture({
        it.set(ListenableWorker.Result.success())
    })

}
Run Code Online (Sandbox Code Playgroud)

ian*_*ake 5

根据ListenableWorker 文档页面中线程

您可以通过以下两种方式之一创建 ListenableFutures:

  1. 如果您使用番石榴,请使用ListeningExecutorService.
  2. 否则,请包含councurrent-futures在您的 gradle 文件中并使用CallbackToFutureAdapter.

  • 视频或博客中几乎没有关于如何在需要运行超过 10 分钟的作业的用例中使用 ListenableWorker 的有效示例。开发人员的文档中仅提到了一个不完整的示例,其代码很难理解。请问这个问题可以解决吗?@ianhanniballake 从该示例中,尝试调整 ait,我不断收到 CallbackToFutureAdapter.getFuture 进行垃圾收集,但没有关于如何解决错误的单个文档。另外,是否即将支持 RxJava? (3认同)
  • 如果可监听工作人员的文档能够正确更新以展示如何使用回调未来或任何其他方式使用线程,我将非常感激。由于服务器或SDK中的许多API现在都是异步调用 (2认同)