我正在写一个需要跟踪季度/半/周期的运行时间的运动应用程序。经过的时间需要准确到秒。即使用户通过按电源按钮明确地将设备置于睡眠模式,游戏时钟也需要继续运行。涉及使用Handler.postDelayed()触发时钟滴答每200ms和WindowManager.LayoutParms.FLAG_KEEP_SCREEN_ON,确保了“时钟”不是由屏幕超时停止设备睡眠时有效的Android定时器
我在第一次尝试。但是我很快就了解到可以通过按电源按钮手动将设备置于睡眠状态来绕过此方法。另外,postDelayed()方法正在经历一些时钟漂移,显然是run()方法花费的时间的结果。实际的数字仍然是准确的,但并不是一致的,例如,在用户容易理解的5秒边界上 - 所涉及的定时器开始漂移,导致一些可理解的用户混淆。
经过一番研究,我发现使用服务的技术,java timers,AlarmManager和PartialWakeLock来实现定时器。服务本身不能解决与设备进入睡眠相关的问题。 Java计时器(如服务)不能解决设备进入睡眠状态的问题。 AlarmManager似乎是一种很好的方法,但我担心这不适合使用AlarmManager(即警报间隔非常短)。使用PartialWakeLock也看起来很有希望,但它本身并没有解决我遇到的时钟漂移问题。我将尝试AlarmManager和PartialWakeLock的组合。这个想法是,AlarmManager将帮助对抗时钟漂移和PartialWakeLock,以帮助保持代码简单(手指交叉)。我希望这种方法能够在节能,代码复杂度和用户期望之间取得合理的平衡。任何意见是极大的赞赏。
感谢,
丰富
。 – NitZRobotKoder 2014-04-03 01:37:07