【发布时间】:2021-11-14 17:39:05
【问题描述】:
我有一个应用程序,用户可以从他的设备扫描详细信息并通过 https 将详细信息发送到我的后端服务,以便我可以评估他的数据并将其他数据发送回他的移动设备。
现在我需要执行前面提到的每周扫描一次的后台任务,比如说在星期五,即使应用程序没有运行。如果扫描是在后台任务中运行而不是直接来自用户,我不想将任何数据发送回设备。我只需要将数据从设备发送到服务。
我想选择最好的解决方案,它看起来像带有定期工作请求的 WorkManager (https://developer.android.com/reference/androidx/work/PeriodicWorkRequest)。不过我有几个问题。
-
假设我想每周五进行一次扫描。唯一的限制是用户必须连接到互联网。如果用户安装我的应用程序并在星期一执行它,我会将重复间隔设置为 5 天,将弹性间隔设置为 1 天。所以后台工作应该在最后一天执行,也就是星期五。但是在这个后台扫描之后,周期应该从 5 天变为 7 天,所以它可以在每个下周五执行。我怎样才能做出这种改变?我应该运行 5 天后运行扫描的 OneTime 后台工作并创建为期 7 天的重复后台任务吗?
-
如果用户在整个星期五都没有连接到互联网,那么自下一次执行后是否需要再过一段时间(在这种情况下为 7 天)还是会在星期六执行?如果不是在星期六,我应该怎么做才能在星期六运行它?
-
如果用户在星期五的一半时间内没有连接到互联网,它将在星期五下午执行我的后台工作,间隔为 7 天,间隔为 1 天。但是由于用户半天没有连接,下一个后台工作将在周五下午到周六中午执行?还是会像以前的工作一样只在星期五执行?如果不是,我该如何防止这种行为?
-
如果工作管理器无法确保,该后台任务将在星期五执行,我应该使用什么比。我觉得一天是一个很大的间隔,应该不是这样的问题吧?
我很感激每一个意见和建议。
【问题讨论】:
-
WorkRequest.Builder有一个setInitialDelay函数:developer.android.com/reference/androidx/work/… -
谢谢,这应该可以解决第一个问题。
标签: android kotlin background-task