使用WorkManager的PeriodicWorkRequest

Utt*_*ara 5 android android-workmanager

由于WorkManager是Google I / O中的新功能,因此我正在尝试使用workmanager定期执行任务,

我正在做的是,PeriodicWorkRequest按如下方式安排工作:

Constraints constraints = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
PeriodicWorkRequest build = new PeriodicWorkRequest.Builder(SyncJobWorker.class, MY_SCHEDULE_TIME, TimeUnit.MILLISECONDS)
           .addTag(TAG)
           .setConstraints(constraints)
           .build();

WorkManager instance = WorkManager.getInstance();
if (instance != null) {
          instance.enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.REPLACE, build);
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我请求时PeriodicWorkRequest它也会立即开始工作,

  • 有人知道如何停止立即执行工作吗?在使用PeriodicWorkRequest时。
  • 还想知道我们如何重新安排工作?如果我想更改已经安排好的工作时间该怎么办?

我正在使用 : implementation "android.arch.work:work-runtime:1.0.0-alpha04"

任何帮助将不胜感激。

Myr*_*lav 6

您可以通过在PeriodicWorkRequest.Builder中使用弹性周期来实现。例如,如果您想在重复间隔结束(例如8小时)后的15分钟内运行Worker,代码将如下所示:

val periodicRefreshRequest = PeriodicWorkRequest.Builder(
            RefreshWorker::class.java, // Your worker class
            8, // repeating interval
            TimeUnit.HOURS,
            15, // flex interval - worker will run somewhen within this period of time, but at the end of repeating interval
            TimeUnit.MINUTES
    )
Run Code Online (Sandbox Code Playgroud)

视觉上的错觉


小智 -1

要延迟任务,您可以使用 setInitialDelay。

我们使用 setInitialDelay 来确保通知在事件发生当天触发,而不是立即触发。此延迟是通过单独的方法计算的,该方法返回从现在到通知应触发的时间(事件发生日期的中午)之间的毫秒数。请注意,此延迟并不总是准确的!由于现代 Android 的工作方式,您的工作可能会因多种因素而延迟,因此对于时间敏感的目的请注意这一点。

所有信息都在这篇文章中。https://medium.com/@eydryan/scheduling-notifications-on-android-with-workmanager-6d84b7f64613