2011-09-16 114 views
7

https://github.com/commonsguy/cwac-wakeful演示中,OnAlarmReceiver(BroadcastReceiver)onReceive()方法被調用以響應報警。 onReceive()方法啓動服務。有兩個Intent使用,一個由BroadcastReceiver接收,一個由服務接收。這似乎更復雜,它需要,爲什麼不只是讓服務從AlamManager接收意圖?從AlarmManager直接喚醒服務

我知道在執行onReceive()時保證電話不會睡眠,即它使用喚醒鎖包裝。我不確定服務類是否提供任何類似的保證。

是否有任何方法可以直接從鬧鐘啓動服務,同時仍能保證手機將從睡眠中喚醒,並且只有在可以獲取喚醒鎖後才能進入睡眠狀態?

回答

14

這似乎更復雜,它需要是爲什麼不只是讓服務從AlamManager接收意圖?

由於Android不保證該設備將保持足夠的清醒長的getService()PendingIntent被調用。保證是只有getBroadcast()PendingIntent - Android確保設備將保持清醒(通過WakeLock)在您的onReceive()呼叫期間。

相信我,我希望我們可以跳過它。

+0

好的,謝謝你的回覆 – alexbirkett

+0

哦,這太好了 - 我想知道同樣的事情 - 顯然[在API示例的簡單報警示例中,這不是一個問題](http://stackoverflow.com/a/ 14094314/281545) - 或者我錯過了什麼? –

+1

@Mr_and_Mrs_D:這個例子有很多問題,它甚至不好笑。有一天,我會提交一個問題,希望能夠改變它。 – CommonsWare