2011-11-07 48 views
3

不可否認,我只是在這裏進行黑客攻擊,所以我想了解一些知識。哪個更適合後臺服務WakeLock或startForeground

我有一個服務,我在後臺運行連接到另一個線程,倒計時器。在倒計時之後,我遇到了問題,並推測這是因爲垃圾收集服務。我似乎已經使用startForeground解決了問題(並且看不到真正的電池使用情況)。現在我讀了關於喚醒鎖,有沒有關於何時使用其中一個的最佳實踐?

謝謝!

回答

2

我有一個服務,我在後臺運行連接到另一個線程,倒計時器。

請使用AlarmManager,所以你的服務只需要在內存中它實際上是在做工作的時候,不只是看時鐘滴答。關於Android最大的用戶抱怨之一就是開發人員製造的這些阻塞手機的背景事件。

我似乎使用startForeground有固定的問題(和看不到實物的電池使用)。

背後startForeground()關鍵是要表明你的服務被繼續將價值傳遞給用戶,例如,如果該服務是由於回收到遊逛過長或內存不足的條件下,用戶會注意到。坐着看時鐘滴答是而不是「不斷向用戶傳遞價值」。請使用AlarmManager,您不需要startForeground()

現在我讀了關於wakelocks,有沒有什麼時候使用其中的最佳做法?

WakeLock保持CPU上電(可能還有其他事情,如屏幕)。它與startForeground()沒有多大關係。如果你使用AlarmManager,根據你正在做的工作,你可能需要一個WakeLock來確保設備保持清醒狀態,同時你做你的perodic wo

+0

「startForeground()後面的點是表示你的服務是不斷交付價值給用戶,這樣用戶就會注意到由於掛起太長或內存條件太低而無法回收服務。坐着看時鐘滴答不是「不斷向用戶傳遞價值」,請使用AlarmManager,並且您將不需要startForeground()。「對,但是,我正在同時註冊來自加速度計的點擊,並在每次讀取時重新設置時鐘。所以我確實需要在同一時間打開它。我會研究Alarm Manager。 – Jackie

+0

@Jackie:「我同時在加速度計上同時註冊點擊並在每次讀取時重新設置時鐘」 - 目前尚不清楚爲什麼這是一項服務。在嘗試使用傳感器時,設備必須始終打開電源。傳感器被設計爲從前景活動中使用。無論如何,'AlarmManager'不會幫助你。但是,如果您想防止設備入睡,您需要一個'WakeLock',以便您可以讀取傳感器。 – CommonsWare

+0

「設備在嘗試使用傳感器時必須始終打開電源。」我不相信這是真的,因爲如果是這樣的話,我會認爲我會看到更多的電量消耗。它現在似乎很好。 – Jackie

相關問題