Android 中的 Worker 可以持续重试请求多长时间?
Posted
技术标签:
【中文标题】Android 中的 Worker 可以持续重试请求多长时间?【英文标题】:For how long can a Worker in Android keep retrying doing a request? 【发布时间】:2021-09-03 02:22:48 【问题描述】:这是我在 *** 中的第一个问题,所以请原谅我可能犯的任何常见错误。我在 android 中使用 CoroutineWorker 在 GraphQL 中进行突变,其想法主要是通过推送通知接收 Token,然后使用此 Worker 向服务器发送突变。
我已经成功地做到了,但是当我向它添加 BackOff 策略时,我正在分析这个工人的行为。假设这个工人发送了第一个突变,由于某种原因,服务器关闭了......所以没问题,使用 backOff 策略它将继续发送并重试。但问题是,在没有达到结果的情况下,持续重试多长时间。成功()逻辑?有限制吗? 我在官方文档中找不到任何信息:Retry and Backoff
这是我的工人的样子:
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()
)
如果能得到任何帮助,我将不胜感激。
【问题讨论】:
Worker 会一直尝试它的工作,但每次它尝试完成工作时,延迟都会增加。我不知道您是否可以实施一个不能超过延迟时间的限制,否则您最终会在重试之间出现很长的延迟,您的工作人员将有效地停止工作。 谢谢 Dominik!,我想有一个最大的延时时间。 【参考方案1】:所以,最后我在 IssueTracker 中找到了这篇文章:https://issuetracker.google.com/issues/115708468?pli=1。
事实证明,在到达 Result.Succes() 之前,它永远不会结束重试。
【讨论】:
以上是关于Android 中的 Worker 可以持续重试请求多长时间?的主要内容,如果未能解决你的问题,请参考以下文章