Android 中的 Worker 可以持续重试执行请求多长时间?
For how long can a Worker in Android keep retrying doing a request?
这是我在 Whosebug 中的第一个问题,所以请原谅我可能犯的任何常见错误。我在 Android 中使用 CoroutineWorker 在 GraphQL 中进行突变,这个想法主要是通过推送通知接收令牌,然后使用此 Worker 向服务器发送突变。
我已经设法做得很好,但我正在分析当我向它添加 BackOff 策略时该工作人员的行为方式。假设这个 worker 发送了第一个突变,由于某种原因,服务器宕机了……所以没问题,使用 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()
)
如果能得到任何帮助,我将不胜感激。
所以,最后我能够在 IssueTracker 中找到这个 post:https://issuetracker.google.com/issues/115708468?pli=1。
事实证明,在到达 Result.Succes() 之前,它永远不会结束重试。
这是我在 Whosebug 中的第一个问题,所以请原谅我可能犯的任何常见错误。我在 Android 中使用 CoroutineWorker 在 GraphQL 中进行突变,这个想法主要是通过推送通知接收令牌,然后使用此 Worker 向服务器发送突变。
我已经设法做得很好,但我正在分析当我向它添加 BackOff 策略时该工作人员的行为方式。假设这个 worker 发送了第一个突变,由于某种原因,服务器宕机了……所以没问题,使用 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()
)
如果能得到任何帮助,我将不胜感激。
所以,最后我能够在 IssueTracker 中找到这个 post:https://issuetracker.google.com/issues/115708468?pli=1。
事实证明,在到达 Result.Succes() 之前,它永远不会结束重试。