WakefulBroadcastReceiver 是一种特殊的广播接收器. 它可以自动创建和管理唤醒锁 PARTIAL_WAKE_LOCK
来执行任务. 确保耗时任务执行完毕之前设备不会休眠.
WakefulBroadcastReceiver
收到广播后一般会启动 Service
(通常用 IntentService
来处理耗时任务), 同时确保设备在整个 Service
执行过程中保持唤醒状态. 不然的话, 对于耗时任务, 设备可能在你完成任务之前就休眠了.
注意点
-
通过 startWakefulService(Context, Intent)
启动 Service
而不是 startService()
. WakefulBroadcastReceiver
启动 Service
的时候会自动创建唤醒锁, 并在 Intent
附上唤醒锁的 ID 来判断这个唤醒锁.
-
最后必须在 Service
中调用 completeWakefulIntent(intent)
释放唤醒锁.
源码简析
源码地址
先看一看启动服务的方法 startWakefulService()
再看一看最后需要调用的方法 completeWakefulIntent()
如何使用
和使用 BroadcastReceiver
一样, 需要先在 AndroidManifest 定义接收器
然后继承 WakefulBroadcastReceiver
并实现 onReceive()
方法
在相应的 SimpleWakefulService
中进行耗时操作最后释放唤醒锁.
参考