2013-06-25 74 views
3

我正在开发一个需要频繁运行小块代码的应用程序(例如每两秒钟一次)。我试图使用简单的Thread.sleep()(或android.os.SystemClock.sleep()来避免中断,最后我尝试了Timer和Handler),但结果是时间程序睡眠是随机的(或者,如果我使用定时器或处理程序,因为系统在屏幕关闭时丢弃它们的消息,它就不会运行),因为系统在屏幕关闭期间进入深度睡眠模式。关闭屏幕的Android Timer/Handler/Thread.sleep()无法正常工作

例如,如果手机插入充电器或正在播放音乐(避免深度睡眠模式),则代码正常工作,但当手机没有做任何事情时,时间可能会从两秒钟长达几分钟的睡眠。

https://groups.google.com/forum/#!topic/android-developers/Eqwp8Uiy2f0似乎唯一的选择是使用AlarmManager强制唤醒,但这种方式可能会导致电池耗尽。

有没有其他的选择?

如果没有,有什么方法可以检测系统何时进入深度睡眠模式?

回答

3

这为时已晚,但可能对其他人有用。 是的,定时器不能在深度睡眠模式下工作。我认为没有比AlarmManager更好的方式来在深度睡眠模式下定期运行某些东西。 此外,由于您的频率仅为2秒,因此如果您的要求在时间上至关重要,我认为您可能需要准确地使用alamrs(setExact()),因为常规警报可能无法更好地为您服务。有时甚至setExact可能不会捕获我观察到的唤醒锁。所以你必须获得你自己的(PARTIAL_ ..)唤醒锁,并做些东西并释放锁。 但是,你必须运行2秒吗? 如果不继续使用定时器,定时器将在设备唤醒后自动继续工作。 看看Should I use AlarmManager or Handler?