对于OneTimeWorkRequest
,我们可以使用setInitialDelay
来指定初始延迟。
但是,PeriodicWorkRequest
没有这种功能。
有没有可靠的方法来实现这一目标?
一种较不可靠的方法是延迟OneTimeWorkRequest
工作人员来设置PeriodicWorkRequest
。但是,这很麻烦,并且可能导致OneTimeWorkRequest
可能失败并且无法安装PeriodicWorkRequest
。
答案 0 :(得分:4)
由于系统运行您的工作,因此您无法控制运行的确切时间。
创建工作执行延迟的最佳选择是使用此PeriodicWorkRequest.Builder
并提供flexInterval
作为第四个参数:
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。
答案 1 :(得分:1)
由于androidx.work:work-*:2.1.0
,PeriodicWorkRequests
支持初始延迟。您可以在setInitialDelay
上使用PeriodicWorkRequest.Builder
方法来设置初始延迟。
有关官方文档,请参见link。