在ListenableWorker示例中,回调对象是从哪里来的?

11

Android 开发文档展示了如何使用 ListenableWorker 的示例。然而,尽管我已将 councurrent-futures 添加到项目中,但我并没有看到文档中使用的任何相关的 Callback 对象:

 @NonNull
    @Override
    public ListenableFuture<Result> startWork() {
        return CallbackToFutureAdapter.getFuture(completer -> {
            Callback callback = new Callback() {
            ...
            }

有人能指点我一下方向吗?在androidx.concurrent.callback中完全找不到Callback类。

这个链接是唯一一个我能找到的使用CallbackToFutureAdapter.getFuture的代码示例。


你的代码中已经有一个了。如果没有,你就不需要回调到未来适配器。这里的诀窍是,你可以使用像 downloadAsynchronously("https://www.google.com", callback) 这样的代码,并使用该代码想要的任何回调,然后将其转换为未来形式,以便在此示例中等待下载完成。 - zapl
1个回答

15

看了类似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;
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接