是否可以在打盹模式或应用待机期间运行 Android 定期和一次性工作人员?

Posted

技术标签:

【中文标题】是否可以在打盹模式或应用待机期间运行 Android 定期和一次性工作人员?【英文标题】:Is it possible to run an Android Periodic and Onetime workers during Doze Mode or App Standby? 【发布时间】:2020-11-27 19:34:34 【问题描述】:

我有一个应用程序,它使用定期和一次性工作人员来执行各种任务,其中一些需要网络连接。我的客户向我报告说,在他根本不使用该应用程序的那一天,他没有执行某项必需的日常任务。尽管应用程序在某一天没有运行,但工作人员仍然需要运行以便向后端服务器报告各种统计信息。我认为这是因为该应用程序一整天都处于应用程序待机模式,并且设备至少在一天中的部分时间处于打盹模式。所以我的问题是,是否可以在应用处于应用待机或打盹模式时让定期或一次性工作人员运行,还是会一直延迟到设备和/或应用唤醒?

或者,我最好使用警报而不是工作人员吗?我看到可以使用setExactAndAllowWhileIdle() 设置警报,“即使系统处于低功耗空闲模式,也将被允许执行”。 “空闲模式”是否意味着打瞌睡和/或应用待机模式?

我一直在努力解决这个问题,因此非常感谢任何帮助和/或指导。

【问题讨论】:

通过使用警报管理器或作业调度程序,您可以实现这一点。在此之前,您必须禁用“打盹模式”。要禁用打盹模式,您必须忽略电池优化。参考:https://***.com/a/52033875/9909676。之后你可以使用 Alarm Manager 或 JobScheduler 谢谢。我会研究这个解决方案。但是,向 android 清单添加权限 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 是否需要用户批准?如果是这样,我怀疑有些用户可能会对允许应用忽略电池优化持谨慎态度。尽管我希望这些工作人员在他们预定的时间运行,尽管处于打瞌睡模式,但我不希望该应用程序成为耗电大户。也就是说,这些工人相对较轻,只需要每 24 小时运行一次。 【参考方案1】:

工作管理器是可延迟的后台工作,当 工作的约束得到满足。如果 WorkRequest 上设置的所有约束都是 满意,工作仍然可以运行一些额外的延迟。这是因为 WorkManager 尊重 Android 电池优化策略。此外,您可以在此处阅读有关 WorkManager 约束的更多信息以了解工作的约束: https://developer.android.com/reference/androidx/work/Constraints.Builder.html

【讨论】:

以上是关于是否可以在打盹模式或应用待机期间运行 Android 定期和一次性工作人员?的主要内容,如果未能解决你的问题,请参考以下文章

打盹模式 - 前台服务是不是继续运行?

如何区分设备进入打盹维护窗口和退出打盹

什么是打盹模式计时?

如何在 Android 上测试打盹模式?

与设备一起移动时,Android 不会退出打盹模式

在现代待机模式下触发后台任务