首页 > 解决方案 > 可以使用 setAlarmClock 绕过打盹模式吗?

问题描述

我正在开发一个需要持续跟踪用户动作的应用程序 - 使用前台服务。该应用程序即使在后台并且屏幕关闭时也应该可以工作。

我真的不需要实时跟踪它,所以,为了避免耗尽电池,我的第一个解决方案是每 1 分钟触发一次预定线程,触发位置侦听器,获取位置然后将其关闭。

这很好用。但当然我最终发现,在打瞌睡模式启动后,它会将这项任务推迟到几分钟——有时是几个小时——提前。哪种会扼杀我的应用程序的目的。

经过一些研究和试验,我发现我可以AlarmManager通过调用来使用setExactAndAllowWhileIdle,这做得更好,但仍然遇到同样的问题。

然后我发现它setAlarmClock始终绕过打盹模式(至少在我的测试设备上:Pixel 3a)。不过,它的不同之处在于,它在状态栏中添加了一个“时钟”图标,表示设置了闹钟。

现在,我可以看到为什么存在打盹模式(滥用)以及为什么setAlarmClock可以绕过它(我们需要警报应用程序是可靠的)。出于这个原因,我不确定我是否应该继续使用它,甚至它是否可能会使我的应用程序被列入黑名单,或者这是否是一种不好的做法——使用警报来检索位置肯定看起来是错误的,但有关此事的文档目前还很不完整。

我可以说这种方法消耗的电池非常少 - 24 小时使用只有 1%。这可能是我用例的最佳解决方案。

那么,继续使用这种方法可以吗?这有可能以某种方式适得其反吗?

标签: androidlocationandroid-doze

解决方案


推荐阅读