我已经设置了一个具有重复时间的 AlarmManagr。这是我设置它的方法:
public void setAlarmManager(Context context, Intent intent) {
PendingIntent pendingIntent;
pendingIntent = PendingIntent.getService(context, 0, intent, 0);
AlarmManager alarmManager =
(AlarmManager)context.getSystemService(context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
40000, pendingIntent);
}
除了当我的设备进入休眠模式时闹钟停止工作,直到我手动唤醒我的设备时,这工作正常。唤醒设备后,AlarmManager 再次开始工作。
如何在 sleep 模式下让管理器保持运行?
最佳答案
这是因为您的 PendingIntent
正在调用服务而不是 BroadcastReceiver
,这意味着设备甚至可以在您的服务创建之前返回 sleep 状态。如果您移动到广播接收器,它“应该”保持清醒状态,直到 onReceive 完成 BroadcastReceiver,这意味着您将有时间获得唤醒锁并启动您的服务。即使您移动到 BroadcastReceiver
,如果处理时间超过 10 秒(这是 BroadcastReceiver
).
摘自AlarmManager的android文档第2段:
"...如果您的警报接收器调用了 Context.startService()
,则电话可能会在请求的服务启动之前进入休眠状态。为防止这种情况,您的 BroadcastReceiver 和 Service 将需要实现单独的唤醒锁定策略,以确保手机继续运行,直到服务可用。”
关于android - AlarmManager 在 sleep 模式下不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10206021/