如果我没有开始服务或活动,我是否需要在我的广播接收器中使用唤醒锁?

时间:2013-03-20 10:06:13

标签: android broadcastreceiver wakelock

我有一个由闹钟调用的广播接收器(使用AlarmManager安排)。在这个接收器中,我只是从数据库中查询寄存器,并启动通知。我认为当从广播接收器启动服务或活动时需要唤醒锁定,但是,如果我只想显示通知(在通知面板中),是否需要唤醒锁定?

2 个答案:

答案 0 :(得分:17)

  

在这个接收器中,我只是从数据库中查询寄存器,并启动通知。

不要在主应用程序线程上执行数据库I / O.

  

我认为当从广播接收器启动服务或活动时需要唤醒锁定,但是,如果我只想显示通知(在通知面板中),是否需要唤醒锁定?

一般情况下,不,您不需要WakeLock中的BroadcastReceiver,即使是通过_WAKEUP警报调用的AlarmManagerWakeLock在这种情况下保证它会使用自己的onReceive()保持设备唤醒。

但是,在这种情况下,您确实不应该在主应用程序线程上执行数据库I / O,并且在主应用程序线程上调用IntentService。这里适当的模式是您将“从数据库中查询寄存器,并启动通知”移动到由BroadcastReceiver启动的WakeLock,以便在后台线程上完成工作。这个需要onReceive(),因为您现在正在{{1}}之外工作。我有a WakefulIntentService that manages the WakeLock for you,如果你想使用它。

答案 1 :(得分:-1)

是的,这是必要的。 我记得在内核级别,CPU将保持运行大约5秒钟。 因此,如果您无法在5秒内完成发送通知,则必须掌握唤醒锁定。并在完成工作后释放它。