Kotlin、WorkManager 每周重复调度一次

Kotlin, WorkManager scheduled repeatedly once in a week

我有一个应用程序,用户可以在其中扫描其设备的详细信息并通过 https 将详细信息发送到我的后端服务,以便我可以评估他的数据并将其他数据发送回他的移动设备。

现在我需要执行后台任务,每周执行一次前面提到的扫描,假设在星期五,即使应用程序未 运行ning。如果扫描是 运行 在后台任务中而不是直接来自用户,我不想将任何数据发送回设备。我只需要将数据从设备发送到服务。

我想选择最好的解决方案,它看起来像带有定期工作请求的 WorkManager (https://developer.android.com/reference/androidx/work/PeriodicWorkRequest)。但是我有几个问题。

  1. 假设我想在每个星期五进行一次扫描。唯一的限制是用户必须连接到互联网。如果用户安装我的应用程序并在星期一执行它,我会将重复间隔设置为 5 天,将弹性间隔设置为 1 天。所以后台工作应该在最后一天执行,也就是星期五。但是在这个后台扫描之后,period应该从5天变成7天,所以它可以在每个下周五执行。我怎样才能做出这个改变?我是否应该 运行 OneTime 后台工作 运行 在 5 天后扫描并创建重复的后台任务,周期为 7 天?

  2. 如果用户整个星期五都没有连接到互联网,那么下一次执行是否需要另一个时间段(在这种情况下为 7 天),还是会在星期六执行?如果不是周六,那我周六怎么办运行呢?

  3. 如果用户有半个星期五没有连接到互联网,它将在星期五下午以 7 天间隔和 1 个弹性日间隔执行我的后台工作。但是由于用户半天没有连接,接下来的后台工作将从周五下午到周六中午执行?还是像之前的工作一样只在周五执行?如果不是,我该如何防止这种行为?

  4. 如果WorkManager不能保证那个后台任务会在周五执行,我该用什么比。我觉得一天是一个相当大的间隔,应该不是这样的问题吧?

我很感激每一个意见和建议。

从那时起我把这个问题放在这里,我获得了一些经验,所以我会为有同样问题的用户提供一些建议。

如果您想每隔几天进行一次后台任务,我建议您将周期间隔设置为一天,并检查上次处理后台工作的时间是否已经是您的预期周期。例如,如果您想要每周一次的经期,请将经期设置为一天。在每天的后台工作中,检查最后一次工作是否在 7 天之前。在这种情况下,如果后台在 7 天后未处理,它将在 8 天或 9 天后启动,但不会在 14 天后启动,因为如果期间设置为 7 天。

我还建议您在手机设置中检查电池电量,找到您的应用程序并确保您的应用程序不会因电池优化而被迫停止。因为强行停止也会杀死你的后台工作。