因此,documentation Firebase JobDispatcher已弃用,应迁移使用WorkManager。我遵循的migration guide表示应该将JobService中实现的功能迁移到ListenableWorker。但是我对如何实现startWork()
感到困惑,该指南只说了
override fun startWork(): ListenableFuture<ListenableWorker.Result> {
// Do your work here.
TODO("Return a ListenableFuture<Result>")
}
我已经进行了大量谷歌搜索,但是在这种情况下我无法弄清楚如何实现/使用ListenableFuture来实现JobService的功能,我在其中调用了jobFinished
并返回了一个布尔值代表工作是否还在进行。感谢您的帮助
答案 0 :(得分:1)
如果需要执行异步代码,则需要使用ListenableWorker。 有Threading in ListenableWorker documentation page涵盖了这一点:
如果您想基于异步回调执行一些工作,则可以执行以下操作:
public class CallbackWorker extends ListenableWorker { public CallbackWorker(Context context, WorkerParameters params) { super(context, params); } @NonNull @Override public ListenableFuture<Result> startWork() { return CallbackToFutureAdapter.getFuture(completer -> { Callback callback = new Callback() { int successes = 0; @Override public void onFailure(Call call, IOException e) { completer.setException(e); } @Override public void onResponse(Call call, Response response) { ++successes; if (successes == 100) { completer.set(Result.success()); } } }; for (int i = 0; i < 100; ++i) { downloadAsynchronously("https://www.google.com", callback); } return callback; }); } }
如果您使用的是Kotlin,则更简单的选择是使用CoroutineWorker
类。
如果您需要执行的是同步操作,则使用Worker
类可能更简单,并且足以满足您的用例。 Threading in Worker中对此进行了记录。