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分钟。