gpt4 book ai didi

android - Workmanager 监听器立即被调用

转载 作者:太空狗 更新时间:2023-10-29 14:37:45 25 4
gpt4 key购买 nike

我需要在 WorkManager (android.arch.work:work-runtime-ktx:1.0.0-alpha11) 完成工作时进行回调。然而,我添加的监听器会在安排工作后立即被调用。

这是我的做法:

val work = OneTimeWorkRequestBuilder<UploadWorker>()
.setConstraints(constraints)
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES)
.setInputData(inputData)
.build()
workManager.beginUniqueWork(INSURANCE_UPLOAD_WORKER, ExistingWorkPolicy.REPLACE, work)
.enqueue().result.toWorkResult()

UploadWorker 类仅在完成整个上传序列后才返回 Success。

扩展函数代码如下:

private val executor = Executor { command -> command?.run() }

class WorkResult(private val future: ListenableFuture<*>) {

fun addListener(listener: () -> Unit) {
future.addListener(Runnable {
debugLog("work result listener runnable called")
listener()
}, executor)
}

}

internal fun ListenableFuture<*>.toWorkResult(): WorkResult {
return WorkResult(this)
}

当我向 WorkResult 添加监听器时,它们都会立即被调用,而无需等待实际工作完成。有什么想法吗?

最佳答案

在为此找到合适的解决方案(没有 GC 错误等)之前,一个基本的方法可能是创建另一个 WorkRequest 并将其链接为处理状态的最后一个工作请求。

当然,您必须单独处理错误状态(并且始终为每个 WorkRequest 返回 Result.success)以允许通过链进行传播。

这绝不是一种可持续的方法,而是必要时的快速修复

关于android - Workmanager 监听器立即被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53281143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com