我已经开发了我的android警报应用程序,它每小时需要进行一些操作(例如1 pm、2pm、3pm、4pm、5pm、6pm等)。
现在正在使用alarmManager,这样我每小时都会收到一次broadCast事件。但是有时该事件被延迟了。
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棉花糖中,Google引入了“打ze”模式。
在这里阅读更多关于它的信息:Optimizing for Doze and App Standby
和/或在这里观看:Android Marshmallow 6.0: Introduction to Doze Mode
在您的情况下,Google建议使用 setAndAllowWhileIdle
强制手机绕过打ze模式,而不是set
(和 setExactAndAllowWhileIdle
而不是setExact
)。
注意! 似乎没有setRepeating
的类似物,因此您必须逐一安排 setExactAndAllowWhileIdle
来“手动”安排下一次重复。
对于具有Android 4.4 KitKat及更高版本的设备-考虑使用 setExact
而不是旧的set
,因为操作系统会尝试转移警报,以最大程度地减少唤醒时间和电池消耗。
可能还有更多要注意的地方-例如,某些OEM可能预先安装了自己的utils,以节省电池生命周期,但至少它必须涵盖库存的Android以及大概大多数流行的设备。
关于Android警报事件被延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34306309/