WorkManager:ResolvableFuture 只能从同一库组前缀中调用
WorkManager: ResolvableFuture can only be called from within the same library group prefix
一段时间以来,我在 ListenableWorker
class 中使用了以下内容:
public ListenableFuture<Result> startWork() {
ResolvableFuture<Result> resolvableFuture = ResolvableFuture.create();
startSomeAsyncStuff(resolvableFuture);
return resolvableFuture;
}
基本上,我开始一些异步工作,将 resolvableFuture
传递给该函数。异步工作完成后,我对从我的 ListenableWorker
传递的 resolvableFuture
对象调用以下命令:
resolvableFuture.set(Result.success());
这很有效,而且看起来仍然有效,但我现在看到针对 ResolvableFuture.create()
的以下 lint 错误消息:
ResolvableFuture can only be called from within the same library group prefix
它仍然可以编译,但是这个警告让我很困扰。现在正确的做法是什么?
您根本不应该使用 ResolvableFuture
,更不用说 WorkManager 使用的内部版本了。
相反,您应该使用 AndroidX Concurrent library:
androidx.concurrent:concurrent-futures:1.0.0
provides CallbackToFutureAdapter
class, a minimalistic utility that allows to wrap callback based code and return instances of ListenableFuture
您会在 1.0.0-beta01 release notes 中注意到,即使是 AndroidX 并发库也已从其 public API.
中删除了 ResolveableFuture
Javadoc for CallbackToFutureAdapter
有一个完整的示例:
public ListenableFuture<Result> startWork() {
return CallbackToFutureAdapter.getFuture(completer -> {
// Your method can call set() or setException() on the
// Completer to signal completion
startSomeAsyncStuff(completer);
// This value is used only for debug purposes: it will be used
// in toString() of returned future or error cases.
return "startSomeAsyncStuff";
});
}
因此您将在 startSomeAsyncStuff
方法中使用 CallbackToFutureAdapter.Completer
代替 ResolvableFuture
。
一段时间以来,我在 ListenableWorker
class 中使用了以下内容:
public ListenableFuture<Result> startWork() {
ResolvableFuture<Result> resolvableFuture = ResolvableFuture.create();
startSomeAsyncStuff(resolvableFuture);
return resolvableFuture;
}
基本上,我开始一些异步工作,将 resolvableFuture
传递给该函数。异步工作完成后,我对从我的 ListenableWorker
传递的 resolvableFuture
对象调用以下命令:
resolvableFuture.set(Result.success());
这很有效,而且看起来仍然有效,但我现在看到针对 ResolvableFuture.create()
的以下 lint 错误消息:
ResolvableFuture can only be called from within the same library group prefix
它仍然可以编译,但是这个警告让我很困扰。现在正确的做法是什么?
您根本不应该使用 ResolvableFuture
,更不用说 WorkManager 使用的内部版本了。
相反,您应该使用 AndroidX Concurrent library:
androidx.concurrent:concurrent-futures:1.0.0
providesCallbackToFutureAdapter
class, a minimalistic utility that allows to wrap callback based code and return instances ofListenableFuture
您会在 1.0.0-beta01 release notes 中注意到,即使是 AndroidX 并发库也已从其 public API.
中删除了ResolveableFuture
Javadoc for CallbackToFutureAdapter
有一个完整的示例:
public ListenableFuture<Result> startWork() {
return CallbackToFutureAdapter.getFuture(completer -> {
// Your method can call set() or setException() on the
// Completer to signal completion
startSomeAsyncStuff(completer);
// This value is used only for debug purposes: it will be used
// in toString() of returned future or error cases.
return "startSomeAsyncStuff";
});
}
因此您将在 startSomeAsyncStuff
方法中使用 CallbackToFutureAdapter.Completer
代替 ResolvableFuture
。