如何解决WorkManager 如何进行定期工作?
我尝试将 WorkManager
与 PeriodicWorkRequestBuilder
一起使用,但我很困惑,并且在文档中找不到令人满意的答案。
这是来自文档的可视化:
[ before flex | flex ][ before flex | flex ]...
[ cannot run work | can run work ][ cannot run work | can run work ]...
\____________________________________/\____________________________________/...
interval 1 interval 2 ...(repeat)
现在让我们举个例子。假设我们有一个餐厅菜单应用程序,我们想每天在晚餐前下载新鲜菜单(我不知道你什么时候吃晚餐,想象一下我们餐厅的人在下午 3:00 到下午 6:00 之间吃晚餐)。所以我们需要在每天下午 3:00 之前下载菜单,以便用户可以立即看到今天的内容。例如。我们希望在每天上午 09:00 到下午 12:00 之间安排 DownloadMenuWorker
(每天早上都会添加我们服务器数据库的菜单,我们希望在晚餐时间开始前有 3 小时的缓冲时间)。下面是将适当的 Worker
加入队列的代码:
val request = PeriodicWorkRequestBuilder<DownloadMenuWorker>(
repeatInterval = Duration.ofHours(24),flexTimeInterval = Duration.ofHours(3)
).apply {
setinitialDelay(calculateNext12PM())
}.build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
UNIQUE_WORK_NAME
ExistingPeriodicWorkPolicy.KEEP,request
)
如果我理解正确,它应该将第一次运行延迟到下一个下午 12 点,之后它应该每天在上午 09:00 到下午 12:00 之间定期运行(因为 repeatInterval = 24
小时和 {{ 1}})。现在我的问题是,如果由于定期请求的不精确性,flexTimeInterval = 3 hours
的实际开始时间为 12:24 PM 会怎样? x+1 时间运行的下一个 24 小时是从 12:24 PM 还是从 12:00 PM 开始计算?如果从 12:24 PM 开始计算,是否意味着 x + 100 运行可能与原始假设(上午 9:00 至下午 12:00 之间)完全不同,晚餐时间结束后我们的客人将获得新鲜菜单?>
换句话说,以下哪个可视化是正确的?
第二种情况会导致延迟和不准确会扩大很多天。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。