6

我已经设置了一个具有重复时间的 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 再次开始工作。

即使在睡眠模式下,如何保持管理器运行?

4

1 回答 1

8

这是因为您PendingIntent调用的是服务而不是服务,BroadcastReceiver这意味着设备甚至可以在您的服务创建之前重新进入睡眠状态。如果您移动到广播接收器,它“应该”保持清醒,直到广播接收器的 onReceive 完成,这意味着您将有时间获得唤醒锁并启动您的服务。即使您移动到 ​​a BroadcastReceiver,您也将希望获得一个唤醒锁,直到您完成处理,如果它需要超过 10 秒(这是 a 的限制BroadcastReceiver)。

这取自 AlarmManager 的 android 文档的第 2 段:

“...如果您的警报接收器呼叫Context.startService(),则手机可能会在请求的服务启动之前休眠。为防止这种情况,您的 BroadcastReceiver 和 Service 将需要实施单独的唤醒锁定策略以确保手机继续运行直到服务变得可用。”

于 2012-05-10T20:52:10.957 回答