Hallo,
Ich habe eine App geschrieben, die Daten aus der Location-Api periodisch in eine Textdatei schreibt. Sie registriert sich im System beim Listener (Location Manager), welcher eine Callback-Methode aufruft und die Daten übergibt. Diese werden dann in eine Textdatei geschrieben.
Die App läuft soweit perfekt und zu 95% stabil. Es kommt jedoch manchmal vor, dass sich scheinbar die MainActivity neu erstellt (was ich an der Oberfläche sehen kann, da sich dann die UI wie nach einem Erststart der App neu aufbaut) allerdings die alte Activity im Hintergrund weiterläuft (was ich wiederum daran erkennen kann, dass die Datei weiter aufgezeichnet wird! D.h. es werden weiterhin neue Daten in die Datei geschrieben.)
Problem 1: Die UI sieht aus, als ob nicht aufgezeichnet werden würde, weil sie gerade erst "neu gestartet" ist. In Wirklichkeit findet aber eine Aufzeichnung statt. Die App befindet sich in einem inkonsistenen Zustand.
Problem 2: Wenn man in der neu aufgebauten UI (bzw. Activity) auf "Start" drückt, dann wird ein neuer Listener registriert und da die alte Activity mit dem alten Listener noch läuft, findet eine doppelte Aufzeichnung statt! D.h., es werden Daten doppelt in die Textdatei geschrieben und das auch noch ziemlich asynchron, da ziemlich oft geflusht wird -> Datei wird völlig unbrauchbar / zerschrieben.
Screen-Rotation ist übrigens aus (immer Portrait).
mir scheint es, als ob dieser Activity-Neuaufbau besonders häufig bei meinem Samsung S8 auftritt. Ich kann allerdings nicht sagen, wie und wann das passiert. Ich kann es leider nicht bewusst erzwingen. Mir scheint es, als ob dies manchmal passiert, wenn die App in den Hintergrund geht und dann längere Zeit dort bleibt bzw. das Gerät in Schlafmodus gegangen ist.
Fragen:
1.) Unter welchen Bedingungen tritt dies auf (also dass die MainAcitivity+UI neu aufgebaut wird und die alte MainActivity weiterläuft bzw. die darin enthaltene Callback-Funktion immer weiter aufgerufen wird).
2.) Wie könnte ich elegant und einfach Problem 1 und 2 lösen? Ich meine Problem 1 evtl. mit static Variablen lösen zu können, sicher bin ich mir aber nicht.
Danke