ListenableWorker 示例中的 Callback 对象来自哪里?
Where does the Callback object come from in the ListenableWorker example?
Android developer docs 显示了如何使用 ListenableWorker 的示例。但是,尽管已将 councurrent-futures
添加到我的项目中,但我现在看到了文档中使用的相关回调对象:
@NonNull
@Override
public ListenableFuture<Result> startWork() {
return CallbackToFutureAdapter.getFuture(completer -> {
Callback callback = new Callback() {
...
}
谁能指出我正确的方向? androidx.concurrent.callback
中似乎根本没有 Callback
class。
this 实际上是我能找到的唯一使用 CallbackToFutureAdapter.getFuture
的代码示例。
查看类似 API 的文档,在我看来 Callback
本身不是 API,而是任何具有结果的操作的通用表示。
https://developer.android.com/reference/androidx/concurrent/futures/CallbackToFutureAdapter.html
例如,您可以按如下方式定义回调,
interface AsyncCallback {
void onSuccess(Foo foo);
void onError(Failure failure);
}
以及startWork方法如下
@Override
public ListenableFuture<Result> startWork() {
return CallbackToFutureAdapter.getFuture(completer -> {
AsyncCallback callback = new AsyncCallback() {
int successes = 0;
@Override
public void onError(Failure failure) {
completer.setException(failure.getException());
}
@Override
public void onSuccess(Foo foo) {
completer.set(Result.success());
}
};
for (int i = 0; i < 100; ++i) {
downloadAsynchronously("https://www.google.com", callback);
}
return callback;
});
}
Android developer docs 显示了如何使用 ListenableWorker 的示例。但是,尽管已将 councurrent-futures
添加到我的项目中,但我现在看到了文档中使用的相关回调对象:
@NonNull
@Override
public ListenableFuture<Result> startWork() {
return CallbackToFutureAdapter.getFuture(completer -> {
Callback callback = new Callback() {
...
}
谁能指出我正确的方向? androidx.concurrent.callback
中似乎根本没有 Callback
class。
this 实际上是我能找到的唯一使用 CallbackToFutureAdapter.getFuture
的代码示例。
查看类似 API 的文档,在我看来 Callback 本身不是 API,而是任何具有结果的操作的通用表示。
https://developer.android.com/reference/androidx/concurrent/futures/CallbackToFutureAdapter.html
例如,您可以按如下方式定义回调,
interface AsyncCallback {
void onSuccess(Foo foo);
void onError(Failure failure);
}
以及startWork方法如下
@Override
public ListenableFuture<Result> startWork() {
return CallbackToFutureAdapter.getFuture(completer -> {
AsyncCallback callback = new AsyncCallback() {
int successes = 0;
@Override
public void onError(Failure failure) {
completer.setException(failure.getException());
}
@Override
public void onSuccess(Foo foo) {
completer.set(Result.success());
}
};
for (int i = 0; i < 100; ++i) {
downloadAsynchronously("https://www.google.com", callback);
}
return callback;
});
}