【发布时间】:2018-10-18 14:50:36
【问题描述】:
我在尝试实施最新的 WorkManager-alpha10 ListenableFuture 以处理流程完成时遇到一些问题。
现在我的 JobOrganizer 课程有以下内容
private fun enqueueDownloadWork(): ListenableFuture<Void> {
val work = WorkManager.getInstance()
.beginWith(dwdTypologiesJob)
.then(dwdElementsJob)
.then(dwdAnomaliesJob)
return work.enqueue()
}
private fun createDownloadWorkRequests() {
dwdTypologiesJob = OneTimeWorkRequestBuilder<DWDAnomalyTypesJob>()
.addTag("download_typologies_work")
.build()
dwdElementsJob = OneTimeWorkRequestBuilder<DWDElementsJob>()
.addTag("download_elements_work")
.build()
dwdAnomaliesJob = OneTimeWorkRequestBuilder<DWDAnomaliesJob>()
.addTag("download_anomalies_work")
.build()
}
fun downloadData(): ListenableFuture<Void> {
createDownloadWorkRequests()
return enqueueDownloadWork()
}
这是我的电话,谁应该监听完成事件。
val listenable = JobOrganizer.downloadData()
listenable.addListener({
Log.d("Listenable", "Did something 1");
}, {
Log.d("Listenable", "Did something 2");
})
我仍然想念 Runnable 和 Executor 如何在这个函数上工作。谁能解释一下?
谢谢
【问题讨论】:
-
嗨。那些听众为你工作吗?他们似乎是在我安排好工作后立即打电话给他们的。我不知道该怎么办
-
@Євген Гарастович 这可能是因为执行器会立即运行您的代码,因此在您添加侦听器之前工作已经完成。如果您查看
WorkContinuationImpl中的方法enqueue,您将看到这一点。您可以改为检查listenable.isDone()并根据此决定是否需要侦听器。
标签: android kotlin android-workmanager