微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WorkManager 如何进行定期工作?

如何解决WorkManager 如何进行定期工作?

我尝试将 WorkManagerPeriodicWorkRequestBuilder 一起使用,但我很困惑,并且在文档中找不到令人满意的答案。

这是来自文档的可视化:

[     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 之间)完全不同,晚餐时间结束后我们的客人将获得新鲜菜单?>

换句话说,以下哪个可视化是正确的?

1.

1

2.

2

第二种情况会导致延迟和不准确会扩大很多天。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。