Android 闹钟事件延迟

标签 android android-alarms

我开发了我的 android 闹钟应用程序,它需要每隔一小时(例如下午 1 点、2 点、3 点、4 点、5 点、6 点等)。

现在我正在使用 alarmManager,这样我每小时都会收到一个广播事件。但有时事件会延迟。

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

Log.d(Constants.APP_TAG, "setting beep alarm");
PendingIntent  pendingIntent = PendingIntent.getBroadcast( context, 0, new Intent("com.mindedges.beephourly.intent.action.NEW_HOUR"),PendingIntent.FLAG_UPDATE_CURRENT );

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, AlarmSheduleHelper.getImmediateNextHour().getTimeInMillis(),AlarmManager.INTERVAL_HOUR, pendingIntent);

我怎样才能确保我准时收到广播事件。

PS:它在某些特定的手机/anroid 版本上会延迟

最佳答案

在 Android 6.0 Marshmallow 中,Google 引入了“Doze”模式。

在这里阅读更多相关信息:Optimizing for Doze and App Standby

和/或在这里观看:Android Marshmallow 6.0: Introduction to Doze Mode

对于您的情况,Google 建议使用 setAndAllowWhileIdle这会强制手机绕过 Doze 模式,而不是 set(和 setExactAndAllowWhileIdle 而不是 setExact。)

注意! 看起来,setRepeating 没有类似物,因此您必须使用 setExactAndAllowWhileIdle 来“手动”安排下一次重复。 , 一个接一个。

对于 Android 4.4 KitKat 及更高版本的设备 - 考虑使用 setExact而不是旧的 set,因为操作系统会尝试转移警报以最大程度地减少唤醒和电池使用。

可能还有更多要点需要牢记 - 例如,一些 OEM 可能预装了自己的实用程序以节省电池生命周期,但至少它必须涵盖现有的 Android 和可能是大多数流行设备。

关于Android 闹钟事件延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34306309/

相关文章:

android - InstrumentationTestCase 和 AndroidTestCase 的区别

android - 不寻常屏幕的布局

android - 警报管理器 - 安排多个非重复事件

android - 报警服务不工作

Android AlarmManager.setExactAndAllowWhileIdle() 警报在工作一段时间后未触发

android - 'LibraryExtension' 类型的扩展不存在

android - 使用 Firebase Storage 和 Firebase Firestore 创建离线第一个应用程序的最佳方法是什么? #AskFirebase

Android服务服务崩溃2次,停止: ServiceRecord

android - 当设备休眠几个小时时警报不会响起(在 Marshmallow 上)

android - 时间设置为0时立即调用警报 :00