Android 对于PeriodicWorkRequest是否有初始延迟

Android 对于PeriodicWorkRequest是否有初始延迟,android,android-workmanager,Android,Android Workmanager,对于OneTimeWorkRequest,我们可以使用setInitialDelay来指定初始延迟 但是,对于周期性工作请求,没有这样的功能 是否有可靠的方法实现这一目标? 一种不太可靠的方法是使用延迟的OneTimeWorkRequest工作程序,设置PeriodicWorkRequest。但是,这相当麻烦,并且可能会导致OneTimeWorkRequest失败,无法安装PeriodicWorkRequest,因为系统运行您的工作,您无法控制它运行的确切时间 创建工作执行延迟的最佳选择是使用此

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

但是,对于
周期性工作请求
,没有这样的功能

是否有可靠的方法实现这一目标?


一种不太可靠的方法是使用延迟的
OneTimeWorkRequest
工作程序,设置
PeriodicWorkRequest
。但是,这相当麻烦,并且可能会导致
OneTimeWorkRequest
失败,无法安装
PeriodicWorkRequest

,因为系统运行您的工作,您无法控制它运行的确切时间

创建工作执行延迟的最佳选择是使用此
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必须大于或等于PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS和flexMillis必须大于或等于PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS


由于
androidx.work:work-*:2.1.0
周期性工作请求
支持初始延迟。您可以使用
PeriodicWorkRequest.Builder
上的
setInitialDelay
方法设置初始延迟


有关官方文档,请参阅。

您是如何解决此问题的?
setInitialDelay
工作异常。当我将启动时间设置为15分钟,初始延迟设置为1分钟时,工人将在16分钟后启动。我原以为它会立即(如
OneTimeWorkRequest
),但在1分钟之后(而不是16分钟之后)。随后每15分钟启动一次。@proninyaroslav看起来像是在间隔结束时执行,而不是在开始时执行。同样来自文档:
请注意,某些操作系统版本(特别是API 23)忽略了弹性时间间隔。
还请注意,最短弹性时间PeriodicWorkRequest.MIN\u PERIODIC\u flex\u MILLIS为5分钟。