我正在寫一個需要跟蹤季度/半/週期的運行時間的運動應用程序。經過的時間需要準確到秒。即使用戶通過按電源按鈕明確地將設備置於睡眠模式,遊戲時鐘也需要繼續運行。涉及使用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