For OneTimeWorkRequest
, we can have setInitialDelay
to specific the initial delay.
However, there isn't such facility for PeriodicWorkRequest
.
Is there any reliable way to achieve so?
One of the less reliable way, is to have a delayed OneTimeWorkRequest
worker, to setup PeriodicWorkRequest
. However, that's quite cumbersome, and create a possibility, where OneTimeWorkRequest
may fail and not able to install PeriodicWorkRequest
.
Since the system runs your work you can't control the exact time it will run..
Your best option for creating a work execution delay is to use this PeriodicWorkRequest.Builder
and supply a flexInterval as the 4th parameter:
PeriodicWorkRequest build = new PeriodicWorkRequest.Builder(
SyncJobWorker.class,
REPEAT_INTERVAL, // repeatInterval
TimeUnit.MILLISECONDS, // repeatIntervalTimeUnit
FLEX_INTERVAL, // flexInterval
TimeUnit.MILLISECONDS) // flexIntervalTimeUnit
.build();
Docs ref: https://developer.android.com/reference/androidx/work/PeriodicWorkRequest.Builder#periodicworkrequestbuilder_2
Creates a PeriodicWorkRequest to run periodically once within the flex period of every interval period. See diagram below. The flex period begins at intervalMillis - flexMillis to the end of the interval. intervalMillis must be greater than or equal to PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS and flexMillis must be greater than or equal to PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS.