Android:WorkManager 更新重复间隔运行时

Android : WorkManager Update Repeat Interval Runtime

我已经在 WorkManager 上创建了 WorkRequest。我是第一次用。

当服务器向我发送新间隔时,我无法更新重复间隔。

是否可以更新 WorkRequest 的间隔 运行服务器端更改的时间。

我试过如下:

我的代码是:

public static void startLocationTracker() {
        /**
         * Getting Default Minutes from General Params
         */
        List<GeneralParamMaster> generalParamMasters = CommonUses.getGeneralSettings();
        int repeatInterval = 0;
        if (generalParamMasters.size() > 0) {
            repeatInterval = TextUtils.isEmpty(generalParamMasters.get(0).getAutoLatLongTime()) ? DEFAULT_LOCATION_UPDATE_TIME : Integer.parseInt(generalParamMasters.get(0).getAutoLatLongTime());
        }
        PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(MyWorker.class, repeatInterval, TimeUnit.MINUTES)
                .addTag("Location")
                .build();

        WorkManager.getInstance().enqueueUniquePeriodicWork("Location", ExistingPeriodicWorkPolicy.REPLACE, periodicWork);
}

我的Question/Confusion是::

我们将不胜感激。

这是可行的,因为您将新的 WorkRequest 作为唯一周期性工作加入队列,替换之前的 WorkRequest 及其间隔。

请记住,当 PeriodWorker 处于 运行 时,您可能会替换它,因为您正在使用 ExistingPeriodicWorkPolicy.REPLACE。如果另一个 worker 关联到同一个 UniqueName,它是 运行,而您调用 enqueueUniquePeriodicWork,该 Worker 将被取消并安排新的。

因此,在 Worker class 中正确处理取消非常重要,如 documentation.

中所述
  1. pfmaggi 上面已经回答过了;如果您第二次调用此方法,它将替换您原来的 WorkRequest。

  2. 您可以通过调用您拥有的相同方法并使用具有不同时间长度的 ExistingWorkPolicy.REPLACE 来更新间隔。

我发布了类似问题的解决方案

关键是要在 sharedPrefs 中保留你的间隔,并检查它是否已更改,并根据该条件使用 KEEP 或 REPLACE 策略。