不精确的AlarmManager.setRepeating问题

KCD*_*KCD 2 android alarmmanager

我在几篇文章中读到,从API 19开始,所有重复警报都是不准确的.这是否意味着,运行Android 4.4的每台设备都无法执行完全重复的操作?或者我可以通过在我的项目中使用android:targetSdkVersion ="18"在这些设备上避免这种情况.

我想我不需要API 19的功能,但无论如何,每次调用警报时使用setExact并更新时间是否更好?在我的应用程序中,用户应该设置每天通知他的时间.

Com*_*are 5

这是否意味着,运行Android 4.4的每台设备都无法执行完全重复的操作?

这意味着,方法喜欢set()setRepeating()现在默认不精确的,如果你的android:targetSdkVersion是19或更高.有一个setExact()可用于精确报警的功能,由您自己实施重复部分,通过setExact()再次调用作为处理前一次setExact()调用触发的工作的一部分.

或者我可以通过在我的项目中使用android:targetSdkVersion ="18"在这些设备上避免这种情况.

是的,你可以避免这种情况.但最终,有些事情会迫使你的手提高android:targetSdkVersion到19或更高.这意味着最终,您将需要使您的应用程序适应不精确的行为或使用setExact()我上面描述的.

这是一个更好的方法来使用setExact并在每次调用警报时更新时间?

由于setExact()API级别19之前不存在,因此您只能在较新的设备上使用此功能.一旦您设置android:targetSdkVersion到19或更高,则需要开始使用setExact()这些新的设备,而仍然使用set()setRepeating()旧设备.我setExact()仍然不知道在使用android:targetSdkVersion低于19 的情况下使用有什么好处.

  • @NitZRobotKoder:`setExact()`不重复 - 这是一次性事件.如果你不再需要它,你只需要`取消()取消它,比如用更新的时间替换它.我建议您使用**`adb shell dumpsys alarm`**来查看您的预定事件,并确定您是否由于某种原因意外安排了两个. (2认同)