在ListenableWorker示例中,回调对象来自何处?

时间:2019-06-12 07:57:54

标签: android android-workmanager

Android developer docs显示了如何使用ListenableWorker的示例。但是,尽管已将councurrent-futures添加到我的项目中,但我现在看到文档中使用的相关Callback对象:

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

有人能指出我正确的方向吗? Callback中似乎根本没有androidx.concurrent.callback类。

this实际上是我发现的唯一完全使用CallbackToFutureAdapter.getFuture的代码示例。

1 个答案:

答案 0 :(得分:1)

查看类似API的文档,在我看来回调 本身不是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;
    });
}