Präziser Sekunden-Zähler

CrazyC

CrazyC

Ambitioniertes Mitglied
2
Wie sollte man einen präzisen Sekunden-Zähler programmieren?

Habe einen Timer verwendet mit TimerTask (scheduleAtFixedRate).
Der Timer fängt nach 1000 Millisekunden an und führt den TimerTask dann jede weitere 1000 Millisekunden wieder aus.
In dem TimerTask erhöhe ich nur eine long-Variable um eins.
Ist der Abstand zwischen den TimerTask-Ausführungen wirklich immer eine Sekunde oder gibt es bei der Ausführung Schwankungen oder minimale Verspätungen?
Die Programmanweisungen benötigen ja auch immer Zeit zur Ausführung...
Wie misst man korrekt Zeit in einem Android/Java-Programm?
Zum Beispiel wie lange das Programm schon läuft?

Und: Etwas Zeit wird dann ja auch vergehen, bis man die Anzahl verstrichener Sekunden auf der Activity angezeigt hat, so dass die Sekundenzahl in dem Moment eigentlich nicht mehr aktuell sein kann, auch wenn es keine wahrnehmbare Verspätung ist...
 
Zuletzt bearbeitet:
Hallo
"System.currentTimeMillis();" gibt dir die System Zeit in Milli Sek als long zurück.

Wenn du also beim start deiner App dir die Zeit holst und speicherst
Kannst du dir später errechnen wie lange deine App läuft.
Long zeit = System.currentTimeMillis() - timeStartApp;


https://developer.android.com/reference/java/lang/System
System (Java Platform SE 7 )

Der Timer wird nicht sehr stabil laufen. Wozu brauchst du das?
 
Was ist mit nicht stabil genau gemeint?
Wenn mal etwas zu spät der TimerTask ausgeführt wird, wird der nächste TimerTask doch entsprechend etwas früher aufgerufen, oder? Das heißt, es geht keine Zeit verloren und die Anzahl verstrichener Sekunden stimmt immer, oder nicht?

Ich brauche das um einen Sekunden-Zähler zu haben für die bisher abgelaufene Zeit seit Thread-Start.

Deine Variante habe ich mit SystemClock.elapsedRealtime umgesetzt, diese Methode berücksichtigt auch die Zeit, die das Smartphone im Standby-Modus verbringt.
Laufen die Android-Programme eigentlich im Standby-Modus wirklich weiter, sonst wäre eine andere Methode besser...

Aber ich meine, dass die Ausführung der die Zeit messenden Methoden halt auch selbst Zeit benötigen, so dass es immer kleine Verzögerungen und Ungenauigkeiten gibt. Man berechnet und zeigt die verstrichene Zeit also immer etwas später an, als Sie gemessen und berechnet wurde...
 
Zuletzt bearbeitet:
Was ist mit nicht stabil genau gemeint?
Wenn mal etwas zu spät der TimerTask ausgeführt wird, wird der nächste TimerTask doch entsprechend etwas früher aufgerufen, oder? Das heißt, es geht keine Zeit verloren und die Anzahl verstrichener Sekunden stimmt immer, oder nicht?

Wenn du es immer genau haben willst dann frage doch immer die Systemzeit ab die ist Quarz genau.
Der Timer kann auch mal nicht auslösen, wenn zb eine Störung länger dauert als das Intervall. Somit solltest du deine interne Zeit mit der Systemzeit Synchronisieren.

Deine Variante habe ich mit SystemClock.elapsedRealtime umgesetzt, diese Methode berücksichtigt auch die Zeit, die das Smartphone im Standby-Modus verbringt.
Laufen die Android-Programme eigentlich im Standby-Modus wirklich weiter, sonst wäre eine andere Methode besser...

Klar machen sie das nur das BS entscheidet wann und wie oft. Energiesparen.

Wenn du die Zeit nicht mitrechnen willst dann Merke dir die Systemzeit beim verlassen der App und hole dir die neue Zeit beim wider aktiv werden.

Du könnest die onPause() und onResume() benutzen dafür. Activity Lifecycle


Aber ich meine, dass die Ausführung der die Zeit messenden Methoden halt auch selbst Zeit benötigen, so dass es immer kleine Verzögerungen und Ungenauigkeiten gibt. Man berechnet und zeigt die verstrichene Zeit also immer etwas später an, als Sie gemessen und berechnet wurde...

Das sind Nannosec

Ps die Zeit die du zum ablesen und verarbeiten im Kopf brauchst hast du noch nicht bedacht.😀
 
Zuletzt bearbeitet:
Zurück
Oben Unten