2013-05-04 102 views
1

Android可以在BroadcastRceiver中處理廣播時進入深度睡眠狀態嗎? 是否需要儘早在BroadcastReceiver onReceive方法中創建部分喚醒鎖,或者可以在onReceive方法中的任何位置創建它(並傳遞給服務)?Android BroadcastReceiver和深度睡眠

AlarmManager文檔狀態The Alarm Manager holds a CPU wake lock as long as the alarm receiver's onReceive() method is executing. This guarantees that the phone will not sleep until you have finished handling the broadcast.但是其他廣播呢?或者這隻取決於廣播的發送者?

+0

如果設備已經睡着了,它甚至可能不會醒來接收廣播:請參閱http://stackoverflow.com/questions/16254420/broadcastreceiver-behavior-when-phone-is-asleep – 2013-05-04 22:31:05

回答

1

Android可以在BroadcastRceiver中處理廣播時進入深度睡眠狀態嗎?

一般來說,是的。一個值得注意的例外是,BroadcastReceiverAlarmManagergetBroadcast()PendingIntent觸發。

是在廣播接收器的onReceive方法儘早創建部分激活鎖定它需要,或者它可以在任何地方的onReceive方法來創建(並傳遞到服務)?

那麼,你不能通過WakeLock很容易地服務,這就是爲什麼我寫了WakefulIntentService

但是其他廣播呢?或者這隻取決於廣播的發送者?

我不知道任何其他廣播Intent自動擁有WakeLock,除了上述的AlarmManager情景。 可能將是SMS_RECEIVED,因爲傳入的SMS也可以喚醒設備。

+0

在我的情況下,這些是試圖控制它的各種應用程序發送的AIRPLANE_MODE廣播。順便說一句,我試圖插入一個Thread.sleep()開始廣播接收器和結果讓我感到驚訝 - 看起來像電話沒有做深度睡眠在延遲... – DavisNT 2013-05-04 22:15:58

+0

但無論如何 - 我將獲得廣播接收機開始喚醒鎖如果我不會找到任何有關官方Android文檔的參考信息,指出廣播接收機處理廣播會阻止手機進入睡眠狀態。 – DavisNT 2013-05-04 22:28:20