【问题标题】:Android : WorkManager Update Repeat Interval RuntimeAndroid:WorkManager 更新重复间隔运行时
【发布时间】:2019-05-22 09:46:54
【问题描述】:

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

我的问题/困惑是:

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

您的帮助将不胜感激。

【问题讨论】:

    标签: android android-workmanager


    【解决方案1】:

    之所以有效,是因为您将新的 WorkRequest 排入队列作为唯一的周期性工作,替换之前的 WorkRequest 及其间隔。

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

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

    【讨论】:

    • 在 doWork() 中获得 API 结果后,我也在做同样的事情,但对我来说,doWork() 再次调用。所以它会循环。
    • 你为什么要从你的工人那里排队一个独特的周期性工作?你想达到什么目的?
    • 我的目标是更新已排队的 UniquePeriodicWork 的时间间隔。这是我的代码示例。 stackoverflow.com/questions/68298931/…
    • 好的,我已经回答了这个问题。
    【解决方案2】:
    1. pfmaggi 已经在上面回答了这个问题;如果您再次调用此方法,它将替换您原来的 WorkRequest。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 2020-02-15
        • 2021-02-18
        • 1970-01-01
        • 2021-02-08
        相关资源
        最近更新 更多