android - AlarmManager 在 sleep 模式下不工作

标签 android alarmmanager android-alarms

我已经设置了一个具有重复时间的 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/

相关文章:

android - 添加一个按钮以查看

java - 尝试提高 Sqlite 中批量插入的速度。

android - AlarmManager 无法从广播接收器工作

java - Android set() 和 setExact() 警报以不正确的时间间隔触发

android - 定期运行任务(每天一次/每周一次)

安卓时钟应用设置闹钟

java - 在显示 Firebase 查询的 RecyclerView 的开头插入对象

android - Android 中 IntentService 的多个实例

android - Android Nougat 锁屏中 URI 的 startActivity

android - 我可以通过数组定义多个 LinearLayouts 吗?