in unserer Android-Anwendung brauchen wir genaue Timer.
am 4.x alles in Ordnung. aber auf 6.0 und sogar auf 5.x (zumindest auf Samsung) funktionierten alle Timer nicht richtig.
kein Unterschied, wieviel Zeit wir anfordern. zum Beispiel brauche ich 600 ms (gelegentlich) und 30 Sekunden und 5 Minuten Wiederholungstimer. Diese können sich mit einer unerwarteten Zeit verzögern, sogar bis zu mehreren Stunden (!!!), wenn sich das Gerät im Leerlaufmodus befindet (6.0, Doze).
Thread.sleep(), Timer Klasse, pthread_cond_timedwait() (in C), AlarmManager.set() - nicht genau Timeout garantieren.
AlarmManager.setExact() funktioniert besser, aber nicht immer. funktioniert möglicherweise nicht im Leerlaufmodus (Doze). auch wenn die App auf die weiße Liste gesetzt wurde.
AlarmManager.setExactAndAllowWhileIdle() sieht genauso aus wie setExact(). Der einzige Unterschied besteht darin, dass es im Leerlaufmodus arbeitet, aber nur mit einer Zeitüberschreitung von 15 Minuten.
unsere Anwendung zu Power-Whitelist hinzugefügt hat nicht geholfen.
also, gibt es eine Methode, um exakte (zumindest annähernd) sich wiederholende Timeouts zu erhalten?Genaue Timeouts auf Android
1
A
Antwort
0
Mein Vorschlag: Implementieren eines ständig laufenden Dienst und prüfen Sie regelmäßig (zum Beispiel alle 100 ms) mit System.currentTimeMillis(), wenn die angeforderte Zeit erreicht ist.
Nachteil: Verbraucht mehr Batterie als der Timer nähert sich vom Android SDK
meine App ist ein Vordergrund Service. das Problem, dass es unmöglich ist, "alle 100ms" Timeout zu implementieren. Jede Zeitüberschreitung kann sich um eine Stunde verzögern. – RomaRoma