Android警报事件延迟
Posted
技术标签:
【中文标题】Android警报事件延迟【英文标题】:Android alarm events gets delayed 【发布时间】:2016-03-22 06:03:04 【问题描述】:我开发了我的 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:某些特定手机/安卓版本会延迟
【问题讨论】:
【参考方案1】:在 Android 6.0 Marshmallow 中,Google 引入了“Doze”模式。
在此处了解更多信息:Optimizing for Doze and App Standby
和/或在这里观看:Android Marshmallow 6.0: Introduction to Doze Mode
在您的情况下,Google 建议使用 setAndAllowWhileIdle
强制手机绕过打盹模式,而不是 set
(和 setExactAndAllowWhileIdle
而不是 setExact
。)
注意!看起来,setRepeating
没有类似物,因此您必须使用 setExactAndAllowWhileIdle
一个一个地“手动”安排下一次重复。
对于搭载 Android 4.4 KitKat 及更高版本的设备 - 考虑使用 setExact
而不是旧的 set
,因为操作系统会尝试切换闹钟以最大限度地减少唤醒和电池使用。
可能还有更多需要牢记的要点 - 例如,一些 OEM 可能会预装自己的实用程序以节省电池寿命,但至少它必须涵盖现有的 Android 设备和可能的大多数流行设备。
【讨论】:
以上是关于Android警报事件延迟的主要内容,如果未能解决你的问题,请参考以下文章