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警报事件延迟的主要内容,如果未能解决你的问题,请参考以下文章

Android任务杀手列表

在 android Firebase 中设置警报

Android:从 onReceive 方法设置新的警报

Android Oreo中的通知被延迟

如何在android中检测夏令时转换

Android O 地理围栏触发延迟