2016-04-18 24 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