android - 可以使用 setAlarmClock 绕过打盹模式吗?
问题描述
我正在开发一个需要持续跟踪用户动作的应用程序 - 使用前台服务。该应用程序即使在后台并且屏幕关闭时也应该可以工作。
我真的不需要实时跟踪它,所以,为了避免耗尽电池,我的第一个解决方案是每 1 分钟触发一次预定线程,触发位置侦听器,获取位置然后将其关闭。
这很好用。但当然我最终发现,在打瞌睡模式启动后,它会将这项任务推迟到几分钟——有时是几个小时——提前。哪种会扼杀我的应用程序的目的。
经过一些研究和试验,我发现我可以AlarmManager
通过调用来使用setExactAndAllowWhileIdle
,这做得更好,但仍然遇到同样的问题。
然后我发现它setAlarmClock
始终绕过打盹模式(至少在我的测试设备上:Pixel 3a)。不过,它的不同之处在于,它在状态栏中添加了一个“时钟”图标,表示设置了闹钟。
现在,我可以看到为什么存在打盹模式(滥用)以及为什么setAlarmClock
可以绕过它(我们需要警报应用程序是可靠的)。出于这个原因,我不确定我是否应该继续使用它,甚至它是否可能会使我的应用程序被列入黑名单,或者这是否是一种不好的做法——使用警报来检索位置肯定看起来是错误的,但有关此事的文档目前还很不完整。
我可以说这种方法消耗的电池非常少 - 24 小时使用只有 1%。这可能是我用例的最佳解决方案。
那么,继续使用这种方法可以吗?这有可能以某种方式适得其反吗?
解决方案
推荐阅读
- networking - 在 Vagrant VM 上禁用互联网(外部访问)
- javascript - Chrome扩展程序无需单击图标即可开始工作?
- c++ - 在另一个线程中调用 luaL_error 会引发 qWarning
- c++ - 格式化浮点数:返回默认值
- html - wordpress - 帖子编辑器突然将“<”转换为“<”;。我怎样才能避免这种情况?
- c# - 如何使用 C# RDLC 在 ReportViwer 中显示数据库中的多行数据
- c# - .net核心在ValidationAttribute中获取用户
- java - 为什么Java中ResultSet的索引以'1'而不是零开头?
- android - 如何将 HSL 颜色转换为 RGB、Hex 等其他颜色?
- algorithm - Scheme中的扩展欧几里得算法