2011-10-05 64 views
3

我正在使用我的Android服務處理程序,每60分鐘(1小時)重複一些操作,使用PartialWakeLock保持手機不睡覺。但是這會導致很多電池使用。AlarmManager和Handler + WakeLock之間的最佳方式是什麼?

因此,一個研​​究決定有關AlarmManager(我是菜鳥)那someone wrote here是完美的這種東西..

不過現在沿着網狀我發現誰使用AlarmManager讀書,還需要一個喚醒鎖定。這是真的嗎?

在不殺死電池的情況下每60分鐘(1小時)運行一次循環的最佳方式是什麼?

Thanx

P.S.

AlarmManager Android Developer

報警管理只要持有CPU喚醒鎖作爲警報 接收機的onReceive()方法正在執行。這可保證在處理完廣播之前,手機將不會睡眠。 一旦onReceive()返回,警報管理器將釋放此喚醒鎖。 這意味着只要您的onreceive()方法完成,手機在某些情況下會立即睡眠。如果您的鬧鐘接收器名爲 Context.startService(),則在請求的服務啓動之前,手機可能會睡眠 。爲了防止這種情況發生,您的 BroadcastReceiver和服務將需要實施單獨的喚醒 鎖定策略,以確保電話繼續運行,直到 服務變爲可用。

但是好像我需要2個喚醒鎖只有1個喚醒鎖使用處理程序....是真的嗎?

回答

6

我已經作出了許多試驗,這是結果:

- 報警管理器節省比使用處理機+激活鎖定長計時操作更多的電池。

但是,您必須使用附加的喚醒鎖定功能才能啓動您的活動/服務,因爲警報管理器喚醒鎖並未覆蓋它。

即使這種方法使用兩個WakeLock,電池看起來效率更高,壽命更長!在測試過程中(2天),AlarmManager使用的電池電量比其他方法少6倍。在我自己的情況下...

希望這可以幫助一個人!

+0

檢查https://github.com/commonsguy/cwac-wakeful/blob/master/README.markdown以獲取處理其喚醒鎖的服務的標準實現 –

0

我建議您使用AlarmManager以1小時的間隔處理事件。

因爲我們不確切知道你要達到什麼目標,所以我們不能提供更深入的答案/建議。

+0

「幾乎每一分鐘都運行的所有東西」60分鐘不秒鐘!是真的,我可以使用AlarmManager與電話睡覺,仍然不使用喚醒鎖? – Lork

+0

最後你會說:什麼是每60秒運行一次循環的最佳方式,而不必殺死電池?這讓我困惑... – BrainCrash

+0

現在正確!那麼對於這種長時間操作,AlarmManager比Handler更好? AlarmManager似乎也使用喚醒鎖 – Lork

0

我不知道,如果它仍然是相關的,

但得到的答覆是:用AlarmManager是首選。您只需要一個WakeLock即可在AlarmManager喚醒後向您的接收器發送Intent並在服務完成其工作之後繼續運行電話。所以與「所有時間」相比,電話只會在幾毫秒內醒來。

相關問題