8

Android 的AlarmManager Javadoc 状态

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

AlarmServiceAndroid 提供的 API 演示中有一个(包 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);

所以在这个例子中,它没有做 aPendingIntent mAlarmSender = PendingIntent.getBroadcast(...);而是做getService了 Javadoc 从未提到过的 a。

我之所以问这个问题是因为 CPU 唤醒锁的含义。Javadoc 说一旦广播接收器onReceive()返回,AlarmManger 的唤醒锁将被释放。

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

4

1 回答 1

6

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

无法保证您的服务会在设备进入睡眠状态之前获得控制。

如果有的话,它似乎暗示您在设置警报时必须使用广播技术。

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

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

于 2011-11-16T12:36:13.700 回答