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 可以持续重试请求多长时间?的主要内容,如果未能解决你的问题,请参考以下文章

python celery 错误重试配置

python celery 错误重试配置

UI Thread 和运行 TCP Client 的 Worker 线程之间的持续数据传输

Java时间间隔问题在Android中的使用

socket.io 客户端持续重试到无法访问的主机

持续的 Spotify 429 错误 - 带有荒谬的重试建议 76,000 秒(约 21 小时)