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 androidx.work:work-*:2.1.0
, PeriodicWorkRequests
support initial delays. You can use the setInitialDelay
method on PeriodicWorkRequest.Builder
to set an initial delay.
See link for official documentation.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With