对于OneTimeWorkRequest
,我们可以使用setInitialDelay
来确定最初的延迟。
但是,PeriodicWorkRequest
没有这样的设施。
有没有可靠的方法来实现这一目标?
其中一个不太可靠的方法是,有一个延迟的OneTimeWorkRequest
工人,设置PeriodicWorkRequest
。然而,这是非常麻烦的,并创造了一种可能性,OneTimeWorkRequest
可能会失败,无法安装PeriodicWorkRequest
。
自androidx.work:work-*:2.1.0
以来,PeriodicWorkRequests
支持最初的延迟。您可以在setInitialDelay
上使用PeriodicWorkRequest.Builder
方法来设置初始延迟。
有关官方文档,请参阅link。
由于系统运行您的工作,您无法控制它将运行的确切时间..
创建工作执行延迟的最佳选择是使用此PeriodicWorkRequest.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。