android中的PeriodicWorkRequest
Posted
技术标签:
【中文标题】android中的PeriodicWorkRequest【英文标题】:PeriodicWorkRequest in android 【发布时间】: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);
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于android中的PeriodicWorkRequest的主要内容,如果未能解决你的问题,请参考以下文章
android 6中的android webview youtube视频中的全屏模式问题
android权限--android开发中的权限及含义(上)
FrameLayout 中的 'android:foreground' 和 'android:foregroundGravity' 如何影响其外观?
Android - 将参数传递给 Android 应用程序中的 RESTful URL