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似乎没有解决这个问题。如果有什么事情似乎意味着你必须在设置警报时使用广播技术。
答案 0 :(得分:6)
我想知道如果您使用示例中的警报,唤醒锁定的含义是什么?
无法保证您的服务在设备入睡之前就能获得控制权。
如果有任何暗示您在设置闹钟时必须使用广播技术。
对于_WAKEUP
警报,是的,因为这是我们保证在设备仍处于唤醒状态时获得控制权的唯一途径。
由于_WAKEUP
警报要完成的工作通常超出了您在清单注册onReceive()
的{{1}}中可以安全执行的工作范围,因此常见的模式是将工作委托给BroadcastReceiver
。为此,我打包了WakefulIntentService
,以实现将控制安全地传递给IntentService
的模式,并使设备保持足够长的时间以使服务完成其工作。