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.
中所述
pfmaggi 上面已经回答过了;如果您第二次调用此方法,它将替换您原来的 WorkRequest。
您可以通过调用您拥有的相同方法并使用具有不同时间长度的 ExistingWorkPolicy.REPLACE 来更新间隔。
我发布了类似问题的解决方案 。
关键是要在 sharedPrefs 中保留你的间隔,并检查它是否已更改,并根据该条件使用 KEEP 或 REPLACE 策略。
我已经在 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.
pfmaggi 上面已经回答过了;如果您第二次调用此方法,它将替换您原来的 WorkRequest。
您可以通过调用您拥有的相同方法并使用具有不同时间长度的 ExistingWorkPolicy.REPLACE 来更新间隔。
我发布了类似问题的解决方案
关键是要在 sharedPrefs 中保留你的间隔,并检查它是否已更改,并根据该条件使用 KEEP 或 REPLACE 策略。