任何方式有PeriodicWorkRequest的初始延迟

Che*_*eng 9 android android-workmanager

因为OneTimeWorkRequest,我们可以setInitialDelay具体说明最初的延迟.

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

有没有可靠的方法来实现这一目标?

一种不太可靠的方法,就是让一个延迟OneTimeWorkRequest工人,进行设置PeriodicWorkRequest.然而,这非常麻烦,并且创造了一种可能性,OneTimeWorkRequest可能会失败并且无法安装PeriodicWorkRequest.

Hed*_*deH 5

由于系统运行您的工作,您无法控制它运行的确切时间。

创建工作执行延迟的最佳选择是使用它PeriodicWorkRequest.Builder并提供 aflexInterval作为第四个参数:

PeriodicWorkRequest build = new PeriodicWorkRequest.Builder(
     SyncJobWorker.class, 
     REPEAT_INTERVAL, // repeatInterval
     TimeUnit.MILLISECONDS, // repeatIntervalTimeUnit
     FLEX_INTERVAL, // flexInterval
     TimeUnit.MILLISECONDS) // flexIntervalTimeUnit
       .build();
Run Code Online (Sandbox Code Playgroud)

文档参考:https : //developer.android.com/reference/androidx/work/PeriodicWorkRequest.Builder#periodicworkrequestbuilder_2

创建一个 PeriodicWorkRequest 以在每个间隔周期的弹性周期内定期运行一次。见下图。弹性周期从 intervalMillis 开始 - flexMillis 到间隔结束。intervalMillis 必须大于或等于 PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,flexMillis 必须大于或等于 PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS。

在此处输入图片说明

  • 谨防。另来自文档:“请注意,某些操作系统版本(特别是 API 23)会忽略弹性间隔。”另请注意,最小弹性时间PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS 为 5 分钟。 (2认同)

小智 5

自 以来androidx.work:work-*:2.1.0PeriodicWorkRequests支持初始延迟。您可以使用setInitialDelayon 方法PeriodicWorkRequest.Builder设置初始延迟。

请参阅官方文档链接。

  • `setInitialDelay` 工作起来很奇怪。当我设置启动时间为 15 分钟,初始延迟为 1 分钟时,工作线程将在 16 分钟后启动。我认为它会立即(如“OneTimeWorkRequest”),但在 1 分钟后(而不是在 16 分钟后)。随后每 15 分钟启动一次。 (2认同)