我设置了一个重复时间的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再次开始工作。
如何让管理员即使在睡眠模式下也能运行?
答案 0 :(得分:6)
这是因为您的PendingIntent
正在呼叫服务而不是BroadcastReceiver
,这意味着设备可以在您创建服务之前重新进入休眠状态。如果您转移到广播接收器,它“应该”保持清醒,直到onReceive完成BroadcastReceiver,这意味着您将有时间获取唤醒锁并开始服务。即使你移动到BroadcastReceiver
,你也会想要获得一个唤醒锁,直到你完成处理,如果它需要超过10秒(这是BroadcastReceiver
的限制)。
这取自AlarmManager的android文档的第2段:
“...如果你的闹钟接收器叫Context.startService()
,手机可能会在启动所请求的服务之前休眠。为了防止这种情况,你的BroadcastReceiver和服务需要实现一个单独的唤醒锁定策略确保手机继续运行,直到服务可用。“