J'essaie de créer une application Android qui enregistre la position d'un coureur chaque seconde. Cependant, je trouve qu'il prend un peu plus d'une seconde quand il se termine.Boucle pour exactement une seconde
Voici mon code:
Runnable run = new Runnable() {
@Override
public void run() {
Long start = SystemClock.elapsedRealtime();
if (getIfRunning() == true) {
try {
if (location2 != null) {
Float distanceFromLast = totalDistance(location2);
addToDistance(distanceFromLast);
}
getCoords();
mMap.clear();
markOldCoords();
writeCoords();
setCount();
updateScreen();
} catch (Exception e) {
}
}
Long time = SystemClock.elapsedRealtime() - start;
handler.postDelayed(this, 1000 - time);
}
};
handler.post(run);
[Javadoc] (http://developer.android.com/reference/android/os/Handler.html#postDelayed%28java.lang.Runnable,%20long%29): * Provoque l'ajout du runnable r la file d'attente des messages, à exécuter ** après ** la durée spécifiée écoulée. * Donc oui, il ne s'exécutera pas * exactement * à l'heure spécifiée, juste après. – Andreas
Une chose que vous pouvez faire ... créer votre propre 'HandlerThread' et baser votre' Handler' hors de cela. Pourquoi? Si vous utilisez le constructeur par défaut pour 'Handler', il est plus probable (en fonction de l'endroit où vous le construisez) d'utiliser le thread d'interface utilisateur. Eh bien, beaucoup d'autres choses utilisent aussi ce thread, donc 'Runnable' devra se contenter d'autres utilisations de ce thread. –
Bien mal essayer! Merci pour votre aide –