ProgressBar wird beim zweiten Öffnen nicht auf "0" zurückgesetzt

In einer Android-Anwendung führe ich eine Aufgabe in einem separaten Thread aus. Während der Thread ausgeführt wird, wird eine Fortschrittsleiste im Hauptfenster aktualisiert, um den Benutzer darüber zu informieren, was los ist. Das Problem ist, dass der Fortschrittsbalken nicht zurückgesetzt wird, wenn ein Benutzer den Thread ein zweites Mal startet. Es wird nur zu 100% sitzen, ohne etwas zu tun.

Die ganze Quelle ist verfügbar auf github. Als Beispiel nehmen Sie das BackupThread und JsonBackup (die Hauptklasse). Beachten Sie, dass "RestoreThread" dasselbe Verhalten aufweist, ich gehe jedoch davon aus, dass das Problem in beiden Fällen identisch ist.

uf einen kurzen Spaziergang durch:

Um ungefährline 300 in JsonBackup.java, Ich öffne einen neuen ProgressDialog. Da es sich um eine neue Instanz handelt, gehe ich davon aus, dass alle ordnungsgemäß initialisiert sind. In meiner aktuellen Arbeitskopie habe ich eine Zeile hinzugefügt, die den Fortschritt auf "0" setzt, aber das hat nichts geändert. Im selben Block erstelle ich den Backup-Thread und führe ihn aus.

Der nächste Code von Interesse ist der Moment, in dem der Thread den Fortschritt an die Hauptanwendung zurückmeldet. Dies geschieht um Zeile 185 von BackupThread.java.

Die Nachricht wird in @ bearbeit Linie 80 von JsonBackup.java, wodurch der Fortschrittsbalken aktualisiert wird.

So weit für die Code-Komplettlösung. Eine Sache, die mir beim Schreiben aufgefallen ist, istline 87 von JsonBackup.java. Ich denke, es wäre am besten, wenn der Thread eine andere Nachricht sendet, die ausdrücklich angibt, dass dies geschehen ist. Aber ich gehe davon aus, dass dies hier nicht das eigentliche Problem ist. Ich sage dies, weil sich der Fortschrittsdialog ordnungsgemäß selbst schließt, sobald er 100% erreicht.

Also, wenn diese ganze Sache einmal ausgeführt wird, funktioniert alles wie erwartet. Nehmen wir nun an, dass der Benutzer die Anwendung verlässt, das Betriebssystem jedoch entscheidet, sie im Speicher zu belassen. Später kommt der Benutzer zurück und möchte ein neues Backup erstellen. Dann funktioniert die App nicht, da der Fortschritt bei 100% hängt. Wenn Sie die App beenden, wird sie wieder funktionieren. Daher gehe ich davon aus, dass sich eine Objektinstanz noch im Speicher befindet und beim erneuten Ausführen einen unsauberen Status aufweist. Aber für das Leben von mir kann ich nicht finden, was los ist. Als Tangens möchte ich hinzufügen: Abgesehen von den Notepad-Tutorials ist dies meine erste Android-App und bla di bla bla ...

Was fehle ich hier ...?