AlarmManager启动服务时的唤醒locking

Android的AlarmManager Javadoc状态

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

在Android提供的API演示中有一个AlarmService (package 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似乎没有解决这个问题。 如果有任何事情,似乎意味着您在设置闹钟时必须使用广播技术。

Solutions Collecting From Web of "AlarmManager启动服务时的唤醒locking"

我想知道的是,如果你使用像例子中的闹钟,唤醒锁的含义是什么?

没有保证你的服务将在设备入睡之前得到控制。

如果有任何事情,似乎意味着您在设置闹钟时必须使用广播技术。

对于_WAKEUP警报,是的,因为这是我们保证在设备仍然清醒时得到控制的唯一途径。

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