从FirebaseJobdisPatcher迁移到Androidx Workmanager时:如何在Startwork中



因此,根据文档,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类可能更简单,并且足以容纳您的用例。这是在工作中的线程中记录的。

相关内容

  • 没有找到相关文章

最新更新