我正在开发一个需要频繁运行小块代码的应用程序(例如,每两秒一次)。我试图使用简单的Thread.sleep()(或android.os.SystemClock.sleep()来避免中断,最后我尝试使用Timer和Handler),但结果就是时间程序休眠是随机的(或者当我使用Timer或Handler时它不会运行,因为当屏幕关闭时系统会丢弃它们的消息),因为系统在屏幕关闭期间进入深度睡眠模式。
例如,如果我将手机插入充电器,或正在播放音乐(避免深度睡眠模式),代码就可以正常工作,但是当手机没有做任何事情时,时间可以从两秒睡眠时间增长几分钟的睡眠。
来自https://groups.google.com/forum/#!topic/android-developers/Eqwp8Uiy2f0似乎唯一的选择是使用AlarmManager强制唤醒,但这种方式可能会导致电池耗尽过多。
还有其他选择吗?
如果没有,有没有办法检测系统何时进入深度睡眠模式?
答案 0 :(得分:3)
为时已晚,但可能对其他人有用。 是的,Timers不能在深度睡眠模式下工作。我认为除了AlarmManager之外没有其他更好的方法可以在深度睡眠模式下定期运行。 此外,由于您的频率仅为2秒,我认为您可能需要选择精确的alamrs(setExact()),因为如果您的要求在时间上很关键,常规警报可能无法为您提供更好的帮助。有时甚至setExact都可能无法捕获我观察到的唤醒锁定。所以你必须获得自己的(PARTIAL_ ..)唤醒锁,并做一些东西并释放锁。 但是你必须要经历2秒的冒犯吗? 如果没有继续使用定时器,它将在设备唤醒后自动继续工作。 看看Should I use AlarmManager or Handler?