我开发了我的 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/