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

时间:2019-05-22 09:46:55

标签: android android-workmanager

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

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

当它在服务器端更改时,是否可以更新WorkRequest的Interval运行时。

我尝试如下:

我的代码是:

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

我的问题/困惑是:

  • 如果我用上面的方法调用相同的函数怎么办?
  • 有什么方法可以更新间隔运行时间吗?

您的帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

之所以可行,是因为您将新的WorkRequest列为唯一的定期工作,以取代之前的WorkRequest及其间隔。

请记住,由于您正在使用ExistingPeriodicWorkPolicy.REPLACE,因此可能会在运行PeriodWorker时更换它。如果与同一个UniqueName相关联的另一个工作程序正在运行,而您调用enqueueUniquePeriodicWork时,该工作程序将被取消,并计划新的工作程序。

因此,如documentation所述,在您的Worker类中正确处理取消很重要。

答案 1 :(得分:0)

  1. pfmaggi已经在上面回答了这个问题;如果您第二次调用此方法,它将替换您原来的WorkRequest。

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

答案 2 :(得分:0)

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

重点是将间隔保留在sharedPrefs中,并检查间隔是否已更改,并根据该条件使用KEEP或REPLACE策略。