Android中的PeriodicWorkRequest

时间:2019-08-31 10:51:20

标签: android android-workmanager

我希望我的任务能够定期执行,因此我使用WorkManger的PeriodicWorkRequest,我将20分钟设置为一个时间段(时间间隔)。但是在该时间段内它执行了几次,有人可以帮我吗?

public void startButtonClicked(View view) {

        PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(

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

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

2 个答案:

答案 0 :(得分:0)

您需要添加一个弹性间隔。在不添加弹性间隔的情况下进行调度时,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

答案 1 :(得分:0)

如果您需要一个PeriodicWorkReques来执行一次为时20分钟的工作程序,请将其作为唯一的工作排队。

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

如果仅需确保将工作人员处决,则应将KEEP用作ExistingPeriodicWorkPolicy。对于WorkManager来说,这是最便宜的,并且不需要停止您的Worker,如果它已经在执行。

有关WorkManager和定期工作的更多信息,您可以看一下我的博客:WorkManager Periodicity