为什么要把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
用例非常有用。将警报发送到 BroadcastReceiver
s,警报管理器机制确保系统唤醒足够长的时间以 传送 广播 Intent
(例如 运行 onReceive()
方法)仅 BroadcastReceiver
s。
如果在这种情况下将 PendingIntent
用于 Service
,则 Service
从 API 的角度来看会得到 "started",但是不一定 运行 因为系统可以立即重新进入睡眠状态。使用 WakefulBroadcastReceiver
,您可以让闹钟触发它,获取唤醒锁并启动您的 Service
。然后 Service
将有机会 运行 并最终需要释放唤醒锁,以便系统可以重新进入睡眠状态。
我正在查看 Google 团队 Android 的示例代码,即 WakefulBroadcastReceiver
我的问题是在 BroadcastReceiver 中使用这种机制 acquire/release 而不是将其放在服务本身中是否有特定原因。如果是,那是什么 ?
它对于警报(参见 AlarmManager
)或其他类型的 PendingIntent
用例非常有用。将警报发送到 BroadcastReceiver
s,警报管理器机制确保系统唤醒足够长的时间以 传送 广播 Intent
(例如 运行 onReceive()
方法)仅 BroadcastReceiver
s。
如果在这种情况下将 PendingIntent
用于 Service
,则 Service
从 API 的角度来看会得到 "started",但是不一定 运行 因为系统可以立即重新进入睡眠状态。使用 WakefulBroadcastReceiver
,您可以让闹钟触发它,获取唤醒锁并启动您的 Service
。然后 Service
将有机会 运行 并最终需要释放唤醒锁,以便系统可以重新进入睡眠状态。