Kotlin,WorkManager 每周重复调度一次
Posted
技术标签:
【中文标题】Kotlin,WorkManager 每周重复调度一次【英文标题】:Kotlin, WorkManager scheduled repeatedly once in a week 【发布时间】: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/…
谢谢,这应该可以解决第一个问题。
【参考方案1】:
自从我提出这个问题以来,我已经获得了一些经验,所以我将为有相同问题的用户输入一些建议。
如果您想每隔几天进行一次后台任务,我建议您将周期间隔设置为一天,并检查上次处理后台工作的时间是否已经是您的预期周期。例如,如果您想要每周一次的周期,请将周期设置为一天。在每天的后台工作中检查最后一次工作是否在 7 天之前。在这种情况下,如果 7 天后未处理后台,它将在 8 天或 9 天后启动,但不会在 14 天后启动,就像将 period 设置为 7 天时一样。
我还建议您在移动设置中检查电池,找到您的应用程序并确保您的应用程序不会因电池优化而被强制停止。因为强制停止也会杀死你的后台工作。
【讨论】:
以上是关于Kotlin,WorkManager 每周重复调度一次的主要内容,如果未能解决你的问题,请参考以下文章
android现代化后台任务WorkManager,kotlin
android现代化后台任务WorkManager,kotlin
Android Jetpack 从使用到源码深耕调度任务组件WorkManager 从实践到原理
Android WorkManager-CoroutineWorker后台运行发送Notification通知到前台通知栏,kotlin