12

对于OneTimeWorkRequest,我们必须setInitialDelay指定初始延迟。

但是,没有这样的设施PeriodicWorkRequest

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

一种不太可靠的方法是让一个延迟的OneTimeWorkRequest工作人员来设置PeriodicWorkRequest. 不过这样比较麻烦,而且有可能会出现哪里OneTimeWorkRequest失败,无法安装PeriodicWorkRequest

4

2 回答 2

5

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

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

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

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

在此处输入图像描述

于 2018-07-08T07:46:27.123 回答
4

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

官方文档见链接

于 2019-07-17T07:29:54.480 回答