2015-12-22 72 views
2

使用AlarmManager设置闹钟时,除非您设置了确切的闹钟,否则可能会延迟闹钟在指定时间之后的某个时间触发。这种延迟的范围可能会有什么保证吗?我想成为一名负责任的开发人员,如果延迟时间不超过一分钟,就不要使用确切的时间。但是我找不到关于文档延迟的任何规范。我将不胜感激资源,记录如何延迟功能及其时间规格。当通过AlarmManager设置不精确的警报时,有多少延迟?

回答

3

重复间隔[对于周期性警报]或从现在到所需交付时间的时间的75%,最小延迟/间隔为10秒,我们不会推迟警报。

从Android源AlarmManagerService为API19(现在仍然一样API23的)

 
    Requested Batch Window 
    1 Mins -> 1- 1¾ Mins 
    10 Mins -> 10-17½ Mins 
    30 Mins -> 30-52½ Mins 
    1 Hour -> 1- 1¾ Hours 

另外值得一提的是,虽然AlarmManagerService守卫窗口长度,确保长度超过半天更大被视为怀疑(并重写为1小时),但它不提供类似的触发时间的完整性检查。

因此,您可以轻松地提供基于经过时间模式(ELAPSED_REALTIME)的基于RTC的值(System.currentTimeMillis()),并以未来数千年的报警结束。

+0

这是基于官方文档吗?那么其他版本的android呢?我可以肯定,在所有Android版本中,我的重复闹钟不会超过其时间间隔的75%?它是为setInexactRepeating()还是setRepeating()? –

+0

这是基于Android的源代码(见我的答案链接) - 这是最权威的文档存在;) 正如上面提到的,这个功能是从API19至23不变,并快速检查表明,同样的功能不变通过为[API 25](http://androidxref.com/7.1.1_r6/xref/frameworks/base/services/core/java/com/android/server/AlarmManagerService.java#708) –

+0

感谢你的快速回答。你没有在你的回答中提到你正在谈论setInexactRepeating()或setRepeating() –