在https://github.com/commonsguy/cwac-wakeful演示中,OnAlarmReceiver(一个BroadcastReceiver) onReceive()方法被调用来响应一个告警。onReceive()方法启动服务。这里使用了两个intent,一个由BroadcastReceiver接收,另一个由Service接收。这看起来比它需要的更复杂,为什么不让服务从AlamManager接收Intent呢?
我理解,当onReceive()正在执行时,手机保证不会休眠,即它被唤醒锁包裹。我不确定Service类是否提供类似的保证。
是否有任何方法可以直接从闹钟启动服务,同时仍然保证电话将从睡眠中唤醒,并且在获得唤醒锁之前不会休眠?
这看起来比它需要的更复杂,为什么不让服务从AlamManager接收Intent呢?
因为Android不能保证设备保持清醒足够长的时间来调用getService()
PendingIntent
。保证是只有为getBroadcast()
PendingIntent
- Android确保设备将保持清醒(通过WakeLock
)在你的onReceive()
呼叫期间。
相信我,我希望我们可以跳过它。