为什么要把WakeLock机制放在BroadcastReceiver中而不是放在Service中呢?

Why to put the WakeLock mechanism in BroadcastReceiver instead of having it in the Service?

我正在查看 Google 团队 Android 的示例代码,即 WakefulBroadcastReceiver

我的问题是在 BroadcastReceiver 中使用这种机制 acquire/release 而不是将其放在服务本身中是否有特定原因。如果是,那是什么 ?

它对于警报(参见 AlarmManager)或其他类型的 PendingIntent 用例非常有用。将警报发送到 BroadcastReceivers,警报管理器机制确保系统唤醒足够长的时间以 传送 广播 Intent(例如 运行 onReceive() 方法)仅 BroadcastReceivers。

如果在这种情况下将 PendingIntent 用于 Service,则 Service 从 API 的角度来看会得到 "started",但是不一定 运行 因为系统可以立即重新进入睡眠状态。使用 WakefulBroadcastReceiver,您可以让闹钟触发它,获取唤醒锁并启动您的 Service。然后 Service 将有机会 运行 并最终需要释放唤醒锁,以便系统可以重新进入睡眠状态。