安卓Doze唤醒窗口

3
我想将我的应用程序更新到Android 6,并使用alarmanager来安排后台服务。对于我的服务而言,重要的是在大约一个小时的时间窗口内被唤醒。它必须在该窗口中唤醒,以便设备退出doze模式时不会错过,但我不关心它在窗口中何时唤醒。
目前我使用.setWindow设置我的闹钟。当我想让它与doze模式一起工作时,我需要使用什么?没有setWindowAndallowWhileIdle。
据我所知,在doze模式下尤其应该优先考虑设置一个窗口而不是固定时间。
1个回答

1
看起来Android终于决定严格控制电池优化,因此很难绕过待机模式。整个重点在于,您确实不应该在设备静止数小时后进行任何工作,而是等待维护窗口(其中作业将开始)或用户拿起他们的设备。
对于执行不精确或周期性工作,请探索JobScheduler:那就是它建立的目的,并为您提供了良好的调度选择(基于周期性、计量/非计量网络、充电等标准)。
他们不希望我们在休眠时做任何工作。所以从我能想到的来看,你使用“每小时一次”的用例只是最好的承诺。计划和“希望”。话虽如此,Android N有一个更“实际”的(宽松)版本的休眠模式,其中维护窗口更快。你可以测试,我的感觉是它并没有听起来那么阴暗。这个策略是公平的:如果用户表现出与手机交互的意图,他们将触发任务。

ref https://www.bignerdranch.com/blog/diving-into-doze-mode-for-developers/


我的应用程序的整个目的是在用户不与设备交互时记录数据。因此,我需要在Doze模式下唤醒设备。所以我认为,必须设置一个精确的闹钟来确保它在我的时间窗口内发生,这样做并不好,而是应该设置一个时间窗口,并给系统更多批处理闹钟的可能性。 - Ben
是的,你说得对,为你设置精确的警报[在19之后仍然不准确]似乎是正确的方法。 “我的整个应用程序的目的是在用户不与设备交互时记录数据”,这就是Android不再希望的。他们的观点是,空闲设备上不应该发生电池耗尽,因为用户没有在使用它。 - Rajat Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接