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/