因此,根据文档,firebase jobdispatcher被弃用,应迁移以使用工人。我正在遵循《迁移指南》,该指南说,在工作服务中实施的功能应迁移到可听的工作者。但是,我对如何实施startWork()
感到难过,该指南只说
override fun startWork(): ListenableFuture<ListenableWorker.Result> {
// Do your work here.
TODO("Return a ListenableFuture<Result>")
}
我已经做了很多谷歌搜索,但是我无法弄清楚如何在此上下文中实现/使用可听的future来实现工作服务的功能,我在其中称为 jobFinished
并返回了布尔值,以表示工作以表示工作。仍在继续。任何帮助都将受到赞赏
如果您需要执行异步代码,则需要使用可听器。可听器文档页面中有一个线程,其中涵盖了以下内容:
如果您想根据异步回调执行一些工作,则会执行这样的操作:
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
类可能更简单,并且足以容纳您的用例。这是在工作中的线程中记录的。