为 PeriodicWorkRequest 设置初始延迟的任何方式

Any way to have initial delay for PeriodicWorkRequest

对于OneTimeWorkRequest,我们可以setInitialDelay指定初始延迟。

但是,PeriodicWorkRequest没有这样的设施。

有什么靠谱的方法吗?

一种不太可靠的方法是延迟 OneTimeWorkRequest worker 来设置 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();

文档参考: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.

由于 androidx.work:work-*:2.1.0PeriodicWorkRequests 支持初始延迟。您可以在 PeriodicWorkRequest.Builder 上使用 setInitialDelay 方法来设置初始延迟。

请参阅 link 获取官方文档。