Android中的Worker可以在多长时间内重试请求



这是我在StackOverflow中的第一个问题,所以请原谅我可能犯的任何常见错误。我正在使用Android中的CoroutineWorker在GraphQL中进行突变,其想法主要是通过推送通知接收一个Token,然后用这个Worker向服务器发送一个突变。

我已经做得很好了,但我正在分析这个工作人员在添加后退策略时的行为。假设这个工作人员发送了第一个突变,由于某种原因,服务器关闭了。。。所以没问题,使用退避策略,它将继续发送并重试。但问题是,在没有达到结果的情况下,要坚持多久。success((逻辑?它有限制吗
我在官方文档中找不到任何信息:
重试并退出

这就是我的员工的样子:

class Worker @AssistedInject constructor(
@Assisted params: WorkerParameters,
appContext: Context,
private val repo: Repo
) : CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
try {
repo.sendMutation().data?.let{ r ->
if(r.result == "OK") {
Result.Succes()
}
}
Result.Retry()    
} catch (e: Exception) {
Result.retry()
}
}
}

这就是我配置的退避策略:

worker.enqueue(
OneTimeWorkRequestBuilder<Worker>()
.setBackoffCriteria(
BackoffPolicy.EXPONENTIAL,
OneTimeWorkRequest.MIN_BACKOFF_MILLIS,
TimeUnit.MILLISECONDS)
.setConstraints(
Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
).build()
)

如果能得到任何帮助,我将不胜感激。

所以,最后我在IssueTracker中找到了这篇文章:https://issuetracker.google.com/issues/115708468?pli=1.

事实证明,在到达Result.success()之前,它从不结束重试。

最新更新