2013-05-04 103 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