drm*_*wer 4 android android-workmanager
在我的ListenableWorker课堂上有一段时间我使用了以下内容:
public ListenableFuture<Result> startWork() {
ResolvableFuture<Result> resolvableFuture = ResolvableFuture.create();
startSomeAsyncStuff(resolvableFuture);
return resolvableFuture;
}
Run Code Online (Sandbox Code Playgroud)
基本上,我开始一些异步工作,传入resolvableFuture该函数。异步工作完成后,我对该resolvableFuture对象调用以下内容ListenableWorker:
resolvableFuture.set(Result.success());
Run Code Online (Sandbox Code Playgroud)
这运行良好,并且似乎仍然有效,但我现在看到以下 lint 错误消息ResolvableFuture.create():
ResolvableFuture 只能从同一个库组前缀中调用
它仍然可以编译,但是这个警告让我很困扰。现在这样做的正确方法是什么?
您根本不应该使用ResolvableFuture,更不用说 WorkManager 使用的内部版本了。
相反,您应该使用AndroidX Concurrent 库:
androidx.concurrent:concurrent-futures:1.0.0提供CallbackToFutureAdapter类,一个允许包装基于回调的代码并返回实例的简约实用程序ListenableFuture
您会在1.0.0-beta01 发行说明中注意到,即使是 AndroidX 并发库也已从ResolveableFuture其公共 API 中删除。
该对的JavadocCallbackToFutureAdapter有这看起来像什么一个完整的例子:
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";
});
}
Run Code Online (Sandbox Code Playgroud)
所以你会在你的方法中使用 aCallbackToFutureAdapter.Completer来代替。ResolvableFuturestartSomeAsyncStuff
| 归档时间: |
|
| 查看次数: |
1160 次 |
| 最近记录: |