我已经在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);
}
我的问题/困惑是:
您的帮助将不胜感激。
答案 0 :(得分:0)
之所以可行,是因为您将新的WorkRequest
列为唯一的定期工作,以取代之前的WorkRequest
及其间隔。
请记住,由于您正在使用ExistingPeriodicWorkPolicy.REPLACE
,因此可能会在运行PeriodWorker时更换它。如果与同一个UniqueName
相关联的另一个工作程序正在运行,而您调用enqueueUniquePeriodicWork
时,该工作程序将被取消,并计划新的工作程序。
因此,如documentation所述,在您的Worker
类中正确处理取消很重要。
答案 1 :(得分:0)
pfmaggi已经在上面回答了这个问题;如果您第二次调用此方法,它将替换您原来的WorkRequest。
您可以通过调用相同的方法来更新间隔,并使用ExistingWorkPolicy.REPLACE使用不同的时间长度。
答案 2 :(得分:0)
我发布了类似问题here的解决方案。
重点是将间隔保留在sharedPrefs中,并检查间隔是否已更改,并根据该条件使用KEEP或REPLACE策略。