对于OneTimeWorkRequest
,我们可以使用setInitialDelay
来指定初始延迟。
然而,对于PeriodicWorkRequest
,没有这样的设施。
有可靠的方法来实现吗?
其中一种不太可靠的方法是,使用延迟的OneTimeWorkRequest
工作者来设置PeriodicWorkRequest
。 但是,这相当繁琐,并且会产生一个可能性,即OneTimeWorkRequest
可能会失败,无法安装PeriodicWorkRequest
。
对于OneTimeWorkRequest
,我们可以使用setInitialDelay
来指定初始延迟。
然而,对于PeriodicWorkRequest
,没有这样的设施。
有可靠的方法来实现吗?
其中一种不太可靠的方法是,使用延迟的OneTimeWorkRequest
工作者来设置PeriodicWorkRequest
。 但是,这相当繁琐,并且会产生一个可能性,即OneTimeWorkRequest
可能会失败,无法安装PeriodicWorkRequest
。
androidx.work:work-*:2.1.0
版本以来,PeriodicWorkRequests
支持初始延迟。 您可以在 PeriodicWorkRequest.Builder
上使用 setInitialDelay
方法来设置初始延迟。setInitialDelay
的工作方式很奇怪。当我设置了启动时间为15分钟和初始延迟为1分钟时,工作程序会在16分钟后开始运行。我原以为它会立即启动(就像 OneTimeWorkRequest
一样),但实际上是在1分钟后启动的(而不是16分钟)。之后的启动将每隔15分钟进行一次。 - proninyaroslavPeriodicWorkRequest.Builder
并提供flexInterval
作为第4个参数。PeriodicWorkRequest build = new PeriodicWorkRequest.Builder(
SyncJobWorker.class,
REPEAT_INTERVAL, // repeatInterval
TimeUnit.MILLISECONDS, // repeatIntervalTimeUnit
FLEX_INTERVAL, // flexInterval
TimeUnit.MILLISECONDS) // flexIntervalTimeUnit
.build();
创建一个周期性的 PeriodicWorkRequest,在每个间隔期内的灵活期内定期运行一次。请参见下面的图表。灵活期从 intervalMillis - flexMillis 开始,到间隔结束。intervalMillis 必须大于或等于 PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,flexMillis 必须大于或等于 PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS。