2013-12-16 63 views
2

我有一個單獨的進程應用程序,它包含一個服務組件(由活動啓動並始終運行)和多個線程。我需要一個應用程序重複暫停(深度睡眠)7秒鐘,然後在非常短的時間內啓動加速度計(收集20個樣本後加速度計停止)以節省電量。它必須在2.3以上的所有Android平臺上運行。電池保護和AlarmManager性能

我的第一種方法是使用基於Handler的sendMessageDelayed方法(延遲= 7秒)在加速度計停止後調用服務組件中的計時器,而無需獲取部分喚醒鎖定。然而它在我看來這不是一個好辦法,因爲計時器只在手機沒有睡着時計數滴答(如果我錯了或者有解決這個問題的請在這裏糾正我)。

我的第二種方法與第一種方法相同,但在調用sendmesssageDelayed之前獲取部分喚醒鎖。它工作正常,但電池消耗太多。

所以在這裏幾個問題:

  1. 我應該使用AlarmManager火,每七秒的廣播?我擔心的是AlarmManager的時間太短,因爲它在內部獲得了大量時間的部分喚醒鎖。我想知道是否有人在AlarmManager獲取Wakelock的最長時間內做過性能分析,或者有其他方法。我閱讀了其他一些表示AlarmManager是有效的解決方案的文章,但它在很長一段時間內特別有用。

  2. 如果需要使用AlarmManager,我可以在廣播接收器中使用作爲服務組件中的公共靜態字段維護的wakelock對象來獲取部分喚醒鎖(因此可以輕鬆地從應用中的任何其他組件訪問它)?

  3. 也有任何問題訪問和使用基於處理程序的對象從廣播接收機通知服務線程收到報警廣播? (處理程序對象作爲服務組件中的靜態公共字段進行維護,因此可以輕鬆地從應用程序中的任何其他組件進行訪問)。

非常感謝您的幫助

+0

解決了嗎?如果是的話 - 你能否把你的解決方案寫成答案? – ransh

回答

0

如果您使用的始終運行有沒有必要使用Alarmmanager的服務。處理程序更容易。每7秒鐘很多,你確定你想要嗎?我的意思是,如果你提到「電池保護」?保持服務運行是昂貴的,而不是服務本身,而是保持使用果汁的東西。

+0

感謝您的評論。我在想,我需要AlarmManager,因爲我確實想暫停服務運行7秒,然後用部分喚醒鎖啓動它。不幸的是我需要部分喚醒鎖,否則加速度計不會產生好的結果。 – user3107977