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

Android 中的 ContactsContract 概览

android布局中的tag怎么用