没有任何官方文档(至少我已经阅读过文档)解释这两种模式的用法和机制。它们如何工作?他们要解决什么问题?
如果任何人都可以为我简化它,我将不胜感激,因为我已经对这两者进行了测试并且没有看到任何有趣的东西。如果您问我,我会说OneTimeWorkRequest.setBackoffCriteria()
对工作没有影响。
这是我的密码,
@Override
public void doSomethingUseful(String order) {
Constraints constraint = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
Data data = new Data.Builder()
.putString("order", order)
.build();
OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(OrderSenderWorker.class)
.setConstraints(constraint)
.setInputData(data)
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 15, TimeUnit.SECONDS)
.build();
WorkManager.getInstance().beginUniqueWork("refresh-order", ExistingWorkPolicy.REPLACE, oneTimeWorkRequest).enqueue();
}
在Worker
类中,每当出现问题时,我都会在WorkerResult.RETRY
方法中返回doWork()
。
谢谢。
答案 0 :(得分:2)
考虑到WorkManager使用运行尝试次数作为参考, BackoffPolicy 为15秒,将是下一个:
对于线性:工作开始时间+(15 *运行尝试次数)
对于指数:工作开始时间+ Math.scalb(15,尝试运行 数-1)
工作开始时间,是首次执行工作(第一次运行尝试)的时间。
运行尝试次数是WorkManager尝试执行特定工作的次数。
还请注意,最大延迟上限为 WorkRequest.MAX_BACKOFF_MILLIS 。
请注意,只有通过返回 WorkerResult.RETRY
来指定Work需要重试时,才会发生重试答案 1 :(得分:1)
如果服务器返回特定状态,请考虑是否要在服务器上访问API,请在一段时间后再次访问API。
现在要控制任意两个API调用之间的间隔时间,您可以使用BackoffPolicy。
如果使用BackoffPolicy.LINEAR,则间隔时间将线性增加直到达到阈值。
或者如果您使用BackoffPolicy.EXPONENTIAL,则间隔时间将呈指数增加,直到达到阈值为止。