2011-05-24 78 views
6
RTC報警睡覺

我已經看到使用Android的報警管理,一些奇怪的問題,儘管我使用RTC(非喚醒)手機將在可靠地發送PendingIntents正確的重複間隔。我測試的允許手機,而在Android上使用

詳細

  • 設備不充電,只是坐在我的牀頭櫃上,而我睡
  • 我的服務醒了它的重複間隔時間(30分鐘,一個極端的,我知道)EVERY TIME
  • 的服務記錄其在文件中的活動,所以我可以在早上
從我瞭解的手機

現在讀它應該除非我把它叫醒,否則我的警報不應該在手機醒來之前發送。

  • 爲什麼我的服務執行?
  • 如果其他服務行爲不端和使用報警將我的服務醒得的_WAKEUP變種?
  • 我能避免被另一個服務喚醒,並從用戶打開屏幕只是醒了嗎?

回答

4

爲什麼我的服務正在執行?

大概還有別的東西讓設備在那些時刻醒來。

如果另一項服務行爲異常,並且使用報警的_WAKEUP變體,我的服務是否也會喚醒?

是的,雖然「行爲不端」是在旁觀者的眼中。

我是否可以避免被其他服務喚醒,並且只是從用戶打開屏幕時醒來?

不直接通過AlarmManager。您可以觀看ACTION_SCREEN_OFFACTION_USER_PRESENT廣播,也許可以禁用它們之間的鬧鐘。

+0

這兩個廣播的侷限性如何?正如您在錯誤報告http://code.google.com/p/android/issues/detail?id=10735中所記錄的那樣,他們無法在清單中註冊。這對於一個活動來說很好,但是因爲我正在處理一項服務,所以它們本質上是無用的,並且將在服務死亡時快速發佈(針對IntentService快速發佈)。廣播也不粘,所以我不能隨意查詢它們。我錯過了什麼嗎?我可以在我的IntentService中創建長期存在的BroadcastReceiver嗎? – smith324 2011-05-24 16:40:01

+0

@ smith324:「正如您在bug報告code.google.com/p/android/issues/detail?id=10735中所記錄的那樣,他們無法在清單中註冊。」 - 恩,是的,沒錯。對不起,忘了。 :-(「我可以在我的IntentService中創建一個長期存在的BroadcastReceiver嗎?」 - 「IntentService」並非設計爲「長期存在」。 – CommonsWare 2011-05-24 16:46:13

+0

嗯,我想我可以創建另一個服務來偵聽屏幕/關閉,但只是感覺像一個黑客和資源浪費:\ – smith324 2011-05-24 16:52:53

0

我剛剛花了一個小時試圖找出爲什麼我的RTC報警發送,即使我的手機正在睡覺PendingIntents。答案非常簡單,因爲它使用USB連接,所以手機的狀態爲「充電」。

大概還有其他的東西讓設備在那些時刻醒來。

許多帶有通知廣告的應用程序(如AirPush,Leadbolt等)會喚醒設備。