我希望我的任务能够定期执行,因此我使用WorkManger的PeriodicWorkRequest,我将20分钟设置为一个时间段(时间间隔)。但是在该时间段内它执行了几次,有人可以帮我吗?
public void startButtonClicked(View view) {
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(
PeriodicRequest.class, 15, TimeUnit.MINUTES
).build();
WorkManager.getInstance(getApplicationContext()).enqueue(periodicWorkRequest);
}
答案 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。