2016-04-18 27 views
1

在我们的Android应用程序中,我们需要确切的计时器。

4.x都可以。但在6.0甚至在5.x(至少在三星)上,任何定时器都无法正常工作。
我们要求的时间没有差别。例如我需要600毫秒(偶尔),30秒和5分钟重复计时器。当设备处于空闲模式(6.0,打盹)时,这些中的任何一个都可能会以意外的时间推迟,甚至长达几个小时(!!!)。

Thread.sleep()方法定时器类,那么pthread_cond_timedwait()(C语言),AlarmManager.set() - 不能保证确切的超时。
AlarmManager.setExact()工作得更好,但并非总是如此。在空闲(打盹)模式下可能根本不工作。即使应用被列入白名单也是如此。
AlarmManager.setExactAndAllowWhileIdle()与setExact()的外观相同。唯一的区别是它在空闲模式下工作,但只有15分钟超时。

加入我们的应用程序的权力白名单并没有帮助。

因此,是否存在一些方法来提供精确的(至少大约)重复超时?Android上的确切超时

回答

0

我的建议:实现一个不断磨合服务System.currentTimeMillis的定期检查(例如每100ms)()达到要求的时候。
缺点:比从Android SDK定时器的方式消耗更多的电池

+0

我的应用程序是一个前台服务。这是不可能实现“每100毫秒”超时的问题。任何超时可能会延迟一个小时。 – RomaRoma