首页 > 解决方案 > 使用 WorkManager 的 PeriodicWorkRequest

问题描述

由于 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);
}

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

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

任何帮助将不胜感激。

标签: androidandroid-workmanager

解决方案


您可以通过在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
    )

视觉插图


推荐阅读