启动服务时AlarmManager唤醒锁

时间:2011-11-16 11:58:11

标签: android alarmmanager android-wake-lock

Android的AlarmManager Javadoc状态

When an alarm goes off, the Intent that had been registered for it is broadcast by the system,

Android提供的API演示中有一个AlarmService(包com.example.android.apis.app),演示了正在使用的AlarmService。

在其中我们有以下内容(为清晰起见而编辑):

PendingIntent mAlarmSender = PendingIntent.getService(AlarmService.this,
            0, new Intent(AlarmService.this, AlarmService_Service.class), 0);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 30*1000, mAlarmSender);

因此,在此示例中,它不执行PendingIntent mAlarmSender = PendingIntent.getBroadcast(...);而是执行Javadoc从未提及的getService

我问这个的原因是因为CPU唤醒锁的影响。 Javadoc说,一旦广播接收器的onReceive()返回,AlarmManger的唤醒锁将被释放。

我想知道如果您使用示例中的警报,唤醒锁定的含义是什么? Javadoc似乎没有解决这个问题。如果有什么事情似乎意味着你必须在设置警报时使用广播技术。

1 个答案:

答案 0 :(得分:6)

  

我想知道如果您使用示例中的警报,唤醒锁定的含义是什么?

无法保证您的服务在设备入睡之前就能获得控制权。

  

如果有任何暗示您在设置闹钟时必须使用广播技术。

对于_WAKEUP警报,是的,因为这是我们保证在设备仍处于唤醒状态时获得控制权的唯一途径。

由于_WAKEUP警报要完成的工作通常超出了您在清单注册onReceive()的{​​{1}}中可以安全执行的工作范围,因此常见的模式是将工作委托给BroadcastReceiver。为此,我打包了WakefulIntentService,以实现将控制安全地传递给IntentService的模式,并使设备保持足够长的时间以使服务完成其工作。