You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android WorkManager断连后未自动重启问题求助

WorkManager网络恢复后不自动重试的问题排查与解决

你的问题主要出在三个核心环节,下面逐一说明并给出修正方案:

  • Worker内部未返回重试触发结果
    CoroutineWorker不会自动捕获异常重试,必须在遇到可恢复的网络错误时,主动返回Result.retry(),而不是Result.failure()。比如在下载逻辑中捕获网络异常:

    override suspend fun doWork(): Result {
        return try {
            // 执行视频下载逻辑
            Result.success()
        } catch (e: IOException) {
            // 网络异常属于可恢复错误,触发重试
            Result.retry()
        } catch (e: Exception) {
            // 其他不可恢复异常,直接标记失败
            Result.failure()
        }
    }
    
  • 未配置重试退避策略
    默认情况下WorkManager的重试规则不明确,需要显式设置退避策略,控制重试间隔,避免频繁请求:

    val downloadWork = OneTimeWorkRequestBuilder<VideoDownloadWorker>()
        .setConstraints(constraints)
        .setInputData(data.build())
        // 设置指数退避,初始延迟10秒,每次重试间隔翻倍
        .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 10, TimeUnit.SECONDS)
        .build()
    
  • 约束仅控制任务启动,不处理运行中网络断开
    你设置的NetworkType.CONNECTED约束只保证任务启动时网络可用,但任务运行中网络断开,WorkManager不会自动暂停或重试。必须由Worker自己捕获网络异常并返回Result.retry(),这样WorkManager会在网络恢复(约束重新满足)时重新执行任务。

  • ExistingWorkPolicy.KEEP的潜在影响
    如果已有同名任务处于失败状态,ExistingWorkPolicy.KEEP会保留旧任务、忽略新创建的任务,导致没有重试机会。可以根据业务需求调整为ExistingWorkPolicy.REPLACE,或者先查询原有任务状态再决定是否创建新任务。

内容的提问来源于stack exchange,提问作者DanMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 03:31:37