好吧,所以我设置了一个警报:
alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime, pendingIntent);哪里
long triggerTime = SystemClock.elapsedRealtime() + mynterval;我把triggerTime存起来以备将来比较。
alarm ,有时在 triggerTime**!**之前开火
例如,我可以在日志中看到:
scanTime: 702672466
SystemClock.elapsedRealtime: 702672132在这里可能出现什么增量错误-1秒,2-3秒或更多?
为什么会发生这种事?
发布于 2016-06-23 12:25:01
这是由于Android Doze模式。
如果用户在一段时间内将设备断开并保持不动,则该设备将进入Doze模式。在Doze模式下,系统试图通过限制应用程序访问网络和CPU密集型服务来节省电池。
现在,警报是CPU密集型服务的情况.如图中所示,密集的工作是在所谓的维护窗口中共同完成的。

标准的AlarmManager警报(包括setExact()和setWindow())被推迟到下一个维护窗口。如果您在Doze时需要设置点火警报,请使用setAndAllowWhileIdle()或setExactAndAllowWhileIdle()。setAlarmClock()设置的警报器继续正常工作-系统在警报开火前不久退出Doze。
https://stackoverflow.com/questions/37991324
复制相似问题