我开发了我的android闹钟应用程序,每小时需要一些东西(如下午1点,下午2点,下午3点,下午4点,下午5点,下午6点等).
现在我正在使用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”模式。
在此处了解更多信息:优化打ze睡和应用待机
和/或在这里观看:Android Marshmallow 6.0:打ze模式简介
对于您的情况,Google建议改用setAndAllowWhileIdle
哪个强制电话绕过打ze模式set
(而setExactAndAllowWhileIdle
不是)setExact
。
注意!似乎没有的类似物setRepeating
,因此您必须setExactAndAllowWhileIdle
逐一手动安排下次递归。
对于具有Android 4.4 KitKat及更高版本的设备-考虑使用setExact
而不是old set
,因为OS会尝试转移警报,以最大程度地减少唤醒和电池消耗。
还有很多要注意的地方-例如,某些OEM可能预先安装了自己的utils,以节省电池寿命,但至少它必须涵盖库存的Android以及大概大多数流行的设备。