android - WorkManager 重试不工作

标签 android android-jetpack android-workmanager

我有一个带有自定义 backoff policy 的 WorkManager .但这不起作用。

  • 我想在 10 秒的最短退避时间后触发重试。
  • 如果 Worker 作业保留在 WorkManager 中,它们会随机执行/在重新启动应用程序后执行(我不知道它们何时被触发,即使规定的默认值为 30 秒)。

询问 worker

public void startWorker() {
    Constraints constraints = new Constraints.Builder()
        .setRequiredNetworkType(NetworkType.CONNECTED)
        .build();
         Log.i("WorkManager", "starting workmanager");

        OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(UploadWorker.class)
                .setInitialDelay(5, TimeUnit.SECONDS)
                .setConstraints(constraints)
                .setBackoffCriteria(BackoffPolicy.LINEAR, WorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS) // Custom retry not working
            .build();

    WorkManager.getInstance().enqueue(work);
}

worker

public class UploadWorker extends Worker {

    @Override
    public Worker.Result doWork() {

        // Do the work here--in this case, compress the stored images.
        // In this example no parameters are passed; the task is
        // assumed to be "compress the whole library."
        Log.i("WorkManager", "do some stuff " + getId());

        // Indicate success or failure with your return value:
        return Result.RETRY;

        // (Returning RETRY tells WorkManager to try this task again
        // later; FAILURE says not to try again.)
    }
}

部分测试日志

08-21 18:16:05.064 8994-8994/com.worker.test I/WorkManager: starting workmanager
08-21 18:16:05.134 8994-9037/com.worker.test I/WorkManager: do some stuff a3f6ca8f-3b05-4691-bd29-dfec720045e9
08-21 18:16:05.136 8994-9037/com.worker.test I/WorkerWrapper: Worker result RETRY for Work [ id=a3f6ca8f-3b05-4691-bd29-dfec720045e9, tags={ com.worker.test.UploadWorker } ]
08-21 18:16:28.770 8994-8994/com.worker.test I/WorkManager: starting workmanager
08-21 18:16:28.807 8994-9039/com.worker.test I/WorkManager: do some stuff 396e6018-4b6c-478d-aaf4-a69ab5f555dd
08-21 18:16:28.808 8994-9039/com.worker.test I/WorkerWrapper: Worker result RETRY for Work [ id=396e6018-4b6c-478d-aaf4-a69ab5f555dd, tags={ com.worker.test.UploadWorker } ]
08-21 18:17:11.600 8994-8994/com.worker.test I/WorkManager: starting workmanager
08-21 18:17:11.659 8994-9076/com.worker.test I/WorkManager: do some stuff c4edd69c-e465-435f-8252-3e4973a320c7
08-21 18:17:11.661 8994-9076/com.worker.test I/WorkerWrapper: Worker result RETRY for Work [ id=c4edd69c-e465-435f-8252-3e4973a320c7, tags={ com.worker.test.UploadWorker } ]

我正在使用 work-runtime1.0.0-alpha07 版本。

这是一个错误还是我遗漏了什么?

最佳答案

问题刚刚得到解决,将在 alpha08 中可用。

https://android-review.googlesource.com/c/platform/frameworks/support/+/735900

关于android - WorkManager 重试不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51953212/

相关文章:

java - 底部导航显示在其他 fragment 中

android - Dagger 2 : Unable to inject dependencies in WorkManager

android - Jetpack workmanager 不返回成功

android - 我如何处理 android 应用程序中的网络连接不良?

android - 购买的源代码上没有 "generate signed bundle/apk"选项

android - logcat 错误中的 "Error reporting WTF"

android - 从 Robotium 测试用例中的错误线程异常调用

android - 尝试 jetpack compose 时显示错误 : compiler backend and cannot be loaded by the old compiler

android - 在 Jetpack Compose 中创建 "nested"菜单的更好或更简单的方法是什么?

android-workmanager - 发现多个文件具有独立于操作系统的路径 'META-INF/proguard/androidx-annotations.pro'