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的唤醒锁将被释放。我想知道的是,如果您使用示例中的Alarm,唤醒锁有什么含义? Javadoc似乎没有解决这个问题。如果有任何可能,这似乎意味着在设置警报时必须使用广播技术。
最佳答案
无法保证您的服务将在设备进入休眠状态之前得到控制。
对于_WAKEUP
警报,是的,因为这是我们可以保证在设备仍处于唤醒状态时获得控制的唯一路径。
由于_WAKEUP
警报要完成的工作通常超出 list list onReceive()
的BroadcastReceiver
中可以安全执行的工作范围,因此常见的模式是将工作委托(delegate)给IntentService
。为此,我打包了 WakefulIntentService
,以实现用于将控制安全地传递给IntentService
并使设备保持足够长的唤醒时间以便服务完成其工作的模式。
关于android - 启动服务时的AlarmManager唤醒锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8151289/