WorkManager 重试不工作
WorkManager retry not working
我有一个自定义 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
版本。
这是一个错误还是我遗漏了什么?
问题刚刚得到解决,将在 alpha08 中可用。
https://android-review.googlesource.com/c/platform/frameworks/support/+/735900
我有一个自定义 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
版本。
这是一个错误还是我遗漏了什么?
问题刚刚得到解决,将在 alpha08 中可用。
https://android-review.googlesource.com/c/platform/frameworks/support/+/735900