Frage von YellowEagle, 31

Android Java Thread schließt sich beim wechsel des Layouts?

Hallo ich habe einen Java Thread geöffnet der sich aber schließt wenn ich ein neues Layout öffne..... Hier der Threadcode:

public class UP_CON implements Runnable {

        @Override
        public void run(){
            while ((true)){
                if(STATUS==true){
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            rel.setText("Verbunden!");
                            b_rel.setEnabled(false);
                            b_dir.setEnabled(true);
                        }
                    });
                } else {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            b_rel.setEnabled(true);
                            rel.setText("Konnte nicht verbinden!");
                            b_dir.setEnabled(false);
                        }
                    });
                }
            }
        }

    }
Antwort
von MalNachgedacht, 13

Das solltest Du nicht so programmieren

die while(true) - Schleife erzeugt in rasanter Folge neue Runnables für den UI-Thread - auch wenn sich am Status gar nichts geändert hat

Also auf jeden Fall den vorherigen Status speichern und nur wenn sich der aktuelle Status vom vorherigen unterscheidet runOnUIThread() aufrufen

Das ganz ist aber noch aus einem anderen Grund tückisch

die Variablen

b_rel, rel und b_dir verweisen ja auf irgendwelche Views einer Activity.
Angenommen der User dreht sein Device von Hochformat in Querformat dann startet Android die Activity aber neu und erstellt auch neue Views gemäß dem Layout

Dein Hintergrund-Thread bekommt das aber nicht von alleine mit und die Variablen 

b_rel, rel und b_dir verweisen immer noch auf die alten Views - die aber gar nicht mehr auf dem Display vorhanden sind.

Dadurch sieht man zum einen die Änderungen gar nicht und zum anderen kann Android die alte Activity auch nicht aus dem Speicher löschen weil ja immer noch Verweise auf Views der alten Activity vorhanden sind.

Und je nachdem ob der Hintergrundthread von dieser Activity aus gestartet wird erzeugt die neue Activity dann einen weiteren Hintergrundthread - wodurch dann zwei davon im Hintergrund laufen.....

Kommentar von YellowEagle ,

Aha :D Und wie lässt sich das lösen? Danke.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten