【问题标题】:WorkManager retry not workingWorkManager 重试不工作
【发布时间】:2018-08-23 01:09:46
【问题描述】:

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

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

询问工人

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);
}

工人

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-runtime 的版本1.0.0-alpha07

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

【问题讨论】:

    标签: android android-jetpack android-workmanager


    【解决方案1】:

    问题刚刚得到解决,将在 alpha08 中提供。

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

    【讨论】:

    • 我正在使用work-runtime:1.0.0-beta02,但它仍然无法正常工作。 Result.retry() 在满足约束时从不让我的工人重新联系.. 非常令人沮丧
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多