Ich habe einen Dienst im Hintergrund ausgeführt. Wann immer es startet, speichere ich die Startzeit in Millisekunden:
%Vor%Ich möchte einen Chronometer anzeigen, der mit dem Zählen beginnt, wenn der Dienst gestartet wird, und niemals stoppt, bis der Benutzer einen Knopf drückt. Ich möchte dem Benutzer erlauben, die Aktivität zu verlassen, indem er den Chronometer rendert, einige Sachen macht und dann zurückkehrt. Aber die Idee ist, dass, wenn der Benutzer zurückkommt, ich nicht möchte, dass der Chronometer wieder auf 0:00 geht. Ich möchte, dass die genaue Zeit angezeigt wird, die seit dem Beginn des Dienstes verstrichen ist.
Ich kann die verstrichene Zeit jedes Mal berechnen, wenn der Benutzer zur Chronometer-Aktivität zurückkehrt:
%Vor%Die Sache ist, dass ich nicht weiß, wie man dem Chronometer sagt, um von dieser Zeit zu beginnen zu zählen!
Die Einstellung als Chronometerbasis funktioniert nicht. Kann jemand erklären, was genau "Basis" bedeutet oder wie man das erreicht?
vielen Dank! BYE
Sie können Chronometer verwenden.
Sie sollten auch diesen Thread überprüfen.
EDIT: Die Lösung:
%Vor% Die Basiszeit ist die Zeit, zu der der Chronometer
gestartet hat. Sie können es mit Chronometer.setBase()
einstellen. Sie sollten die Basiszeit mit SystemClock.getElapsedTime()
ermitteln. Rufen Sie bei jedem Start von setBase()
Chronometer
mit der Startzeit auf. Wenn es möglich ist, dass Activity
zerstört und neu erstellt wird, während der Timer noch aktiv ist, müssen Sie die Basiszeit irgendwo außerhalb des Activity
halten, dem Chronometer
gehört.
Um den Chronometer zu starten, sollten Sie die Methode setBase()
Ihres Chronometers mit SystemClock.elapsedRealTime()
verwenden. Einfach so:
Wenn Sie jedoch zu einem anderen Zeitpunkt starten möchten, müssen Sie die gewünschte Zeit in Millisekunden subtrahieren. Zum Beispiel möchten Sie Ihren Chronometer nach 10 Sekunden starten:
%Vor%Nach 2 Minuten:
%Vor%Aber das Problem hier ist, dass der Chronometer "00:00" Zeit zeigt, bevor es zu zählen beginnt, um es zu Ihrer Zeit zu ändern, müssen Sie das tun:
%Vor%Einige seltsame mit SystemClock.getElapsedTime (), ich habe einige Änderungen für die normale Verwendung mit Startdatum, wie
%Vor%Hier Kind von Chronometer unten, TimeView
%Vor%Einfach kopieren und verwenden, es funktioniert für mich
Wenn Sie die Basiszeit mit .setBase (SystemClock.elapsedRealTime ()) einstellen, beginnt der Chronometer von 00.00 zu zählen, aber die Zeit, die er gespeichert wird, ist die Menge an Millisekunden vom Start. Wenn Sie .stop verwenden, stoppt die interne Zählung nicht, nur die Zeit, die Sie auf der Uhr sehen. Wenn Sie also .start erneut verwenden, springt die Taktzahl auf die tatsächliche Anzahl. Wenn Sie die Zeit, die von Anfang an vergangen ist, speichern möchten, müssen Sie erneut die abgelaufene Systemzeit abrufen und den Unterschied mit der .setTime
machenTags und Links android chronometer