任何对PeriodicWorkRequest进行初始延迟的方法

时间:2018-07-08 07:38:56

标签: android android-workmanager

对于OneTimeWorkRequest,我们可以使用setInitialDelay来指定初始延迟。

但是,PeriodicWorkRequest没有这种功能。

有没有可靠的方法来实现这一目标?

一种较不可靠的方法是延迟OneTimeWorkRequest工作人员来设置PeriodicWorkRequest。但是,这很麻烦,并且可能导致OneTimeWorkRequest可能失败并且无法安装PeriodicWorkRequest

2 个答案:

答案 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();

文档参考:https://developer.android.com/reference/androidx/work/PeriodicWorkRequest.Builder#periodicworkrequestbuilder_2

  

创建一个PeriodicWorkRequest以在每个间隔周期的弹性周期内定期运行一次。参见下图。伸缩周期从intervalMillis-flexMillis开始,直到间隔结束。 intervalMillis必须大于或等于PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,而flexMillis必须大于或等于PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS。

enter image description here

答案 1 :(得分:1)

由于androidx.work:work-*:2.1.0PeriodicWorkRequests支持初始延迟。您可以在setInitialDelay上使用PeriodicWorkRequest.Builder方法来设置初始延迟。

有关官方文档,请参见link