直接从AlarmManager获取唤醒服务



在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()呼叫期间。

相信我,我希望我们可以跳过它。

最新更新