android - Android WorkManager 中的异步 Worker

标签 android android-architecture-components android-workmanager

Google 最近宣布了新的 WorkManager 架构组件。通过在 Worker 类中实现 doWork() 可以很容易地安排同步工作,但是如果我想要怎么办在后台做一些异步工作?例如,我想使用 Retrofit 进行网络服务调用。我知道我可以发出同步网络请求,但它会阻塞线程并且感觉不对。 是否有任何解决方案或目前不支持?

最佳答案

我使用了 countdownlatch 并等待它达到 0,这只会在异步回调更新它时发生。请参阅此代码:

public WorkerResult doWork() {

        final WorkerResult[] result = {WorkerResult.RETRY};
        CountDownLatch countDownLatch = new CountDownLatch(1);
        FirebaseFirestore db = FirebaseFirestore.getInstance();

        db.collection("collection").whereEqualTo("this","that").get().addOnCompleteListener(task -> {
            if(task.isSuccessful()) {
                task.getResult().getDocuments().get(0).getReference().update("field", "value")
                        .addOnCompleteListener(task2 -> {
                            if (task2.isSuccessful()) {
                                result[0] = WorkerResult.SUCCESS;
                            } else {
                                result[0] = WorkerResult.RETRY;
                            }
                            countDownLatch.countDown();
                        });
            } else {
                result[0] = WorkerResult.RETRY;
                countDownLatch.countDown();
            }
        });

        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return result[0];

    }

关于android - Android WorkManager 中的异步 Worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50403013/

相关文章:

Android PreferenceFragment : Setting status bar as per tool bar color

java - 将参数传递给异步类,使 param[0] 和 params[1] 包含不同的值

android - 使用导航组件时关闭 DialogFragment 的正确方法?

android - Unresolved reference : NavArgs after added some arguments to destination

android - 使用 WorkManager 时出现 Java.util.concurrent.RejectedExecutionException

periodic-task - WorkManager PeriodicWorkRequest 真的对任何人重复吗?

java - Android Studio 2.0 - NoSuchAlgorithmException : SHA256WITHDSA Signature not available

java - Gson:@Expose 与 @SerializedName

android - 谷歌示例的 Mvvm uml 图

android-architecture-components - 如何清除Android中WorkManager创建的WorkStatus?