【问题标题】:PeriodicWorkRequest in androidandroid中的PeriodicWorkRequest
【发布时间】:2020-01-04 08:01:33
【问题描述】:

我希望我的任务定期执行,所以我使用 WorkManger 的 PeriodicWorkRequest 并且我设置了 20 分钟作为一个时间段(时间间隔)。但它在那个时间段内执行了多次。有人可以帮我吗?

public void startButtonClicked(View view) {

        PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(

                PeriodicRequest.class, 15, TimeUnit.MINUTES
        ).build();

        WorkManager.getInstance(getApplicationContext()).enqueue(periodicWorkRequest);
    }

【问题讨论】:

    标签: android android-workmanager


    【解决方案1】:

    您需要添加一个弹性间隔。 PeriodicWorkRequest 将在调度时触发而不添加弹性间隔。

               14min              1min              14min               1min
     [     before flex     |     flex     ][     before flex     |     flex     ]...
     [   cannot run work   | can run work ][   cannot run work   | can run work ]...
     \____________________________________/\____________________________________/...
                    interval 1                            interval 2             ...(repeat)
    

    https://developer.android.com/reference/androidx/work/PeriodicWorkRequest.Builder

    【讨论】:

      【解决方案2】:

      如果您需要一个 PeriodicWorkReques 在 20 分钟内执行您的 Worker,请将其作为唯一工作排入队列。

      您可以找到有关 WorkManager 文档的更多信息。基本是使用WorkManager.enqueueUniquePeriodicWork(String, ExistingPeriodicWorkPolicy, PeriodicWorkRequest) 而不是您当前使用的WorkManager.enqueue(PeriodicWorkRequest)

      如果您只需要确保执行您的工作人员,您应该使用KEEP 作为ExistingPeriodicWorkPolicy。它对 WorkManager 来说是最便宜的,并且如果 Worker 已经在执行,则不需要停止它。

      关于WorkManager和周期性工作的更多信息,你可以看看我的博客:WorkManager Periodicity

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多