首页 > 解决方案 > Kotlin,WorkManager 每周重复调度一次

问题描述

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

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

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

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

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

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

  4. 如果工作经理不能确保,那个后台任务会在星期五执行,我应该使用什么比。我认为一天是一个相当大的间隔,应该不是这样的问题,对吧?

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

标签: androidkotlinbackground-task

解决方案


从那时起,我在这里提出了我已经获得了一些经验的问题,因此我将为有相同问题的用户输入一些建议。

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

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


推荐阅读