我将代码放在第一位,然后解释发生的事情:
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
Data data = new Data.Builder()
.putLong(InformationUpdateWorker.INFO_ID, infoId)
.putInt(InformationUpdateWorker.ID, id)
.putLong(InformationUpdateWorker.INFO_W_ID, (long)infoWId)
.putString(InformationUpdateWorker.INFO_L_ID, null)
.build();
final OneTimeWorkRequest task = new OneTimeWorkRequest.Builder(InformationUpdateWorker.class)
.setConstraints(constraints)
.setInputData(data)
.setInitialDelay(4, TimeUnit.SECONDS)
.setBackoffCriteria(BackoffPolicy.LINEAR, 1, TimeUnit.MINUTES)
.build();
workManager.enqueue(task);
因此上述任务可以根据用户操作多次运行。因此,在8小时的跨度内,可能会存在1-100个(实际上)OneTimeWorkRequest
之间的任何地方。我确实有一个限制,那就是它需要互联网连接。
还请注意,我放入BackoffPolicy
重试从1分钟开始,然后线性增长。
现在的问题是,请求似乎并没有立即执行,而是立即执行(入队前2-4小时),所有1-100个请求都在同一时间执行,因此看起来分批处理。我知道WorkManager
在满足我的约束的情况下决定在适当的时间安排它,但是这里有些奇怪。我在做错什么吗?
我不确定用户是否真的没有建立互联网连接,但我自己尝试了一下,每5秒触发多个OneTimeWorkRequests,它们可能仅在5分钟后一起执行。