Reputation: 42806
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
.
Upvotes: 13
Views: 4332
Reputation: 76
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.
Upvotes: 6
Reputation: 3034
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();
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.
Upvotes: 5