WorkManager OneTimeWorkRequest在实际执行之前有很长的延迟

时间:2018-10-11 18:00:38

标签: java android android-workmanager

我将代码放在第一位,然后解释发生的事情:

 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分钟后一起执行。

0 个答案:

没有答案