Switch von Portrait auf Landscape Problem

  • Antworten:5
mcfly
  • Forum-Beiträge: 286

20.01.2011, 12:40:35 via Website

Hallo zusammen

Ich lade von einer DB Daten mit einem Thread und aktualisiere ein Dialog mit dem Fortschritt ( % ) mittels Handler. Das dauert etwa 20 Sekunden.
Wenn ich in dieser Zeit das Gerät drehe ( Landscape nach Portrait oder umgekehrt ) crashed die App. Ich nehme an, dass des Problem der GUI Update Handler

Muss ich in dieser Phase explizit verhindern, dass die Sicht gewechselt wird ? Oder habe ich schlampig programmiert ?

Hat jemand von euch auch schon dieses Problem gehabt und kann mir einen Tipp geben ?

Grüsse

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

20.01.2011, 12:51:11 via Website

Mach den Thread von dem UI unabhängig.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

20.01.2011, 12:52:27 via Website

Hi :)

Das Problem hatte ich auch.
Wenn du das Gerät drehst, wird die komplette Activity neu erstellt, also wirklich eine komplett neue Instanz der Klasse.
Wenn nun das Update des Fortschritts auf die Instanz zugreift, die grade geschlossen wird, oder schon geschlossen ist, erzeugt dieser Zugriff eine Exception.
Genauer, der Zugriff auf die Anzeigekomponenten in der sich schliessenden Activity.

Da meine App eh nicht wirklich auf Landscape Format ausgerichtet ist, habe ich im AndroidManifest einfach als Ausrichtung Portrait für alle meine Activities fest eingestellt.
Will man die Formatumschaltung auch während eines laufenden Fortschrittsbalkens erlauben, muss man denke ich sehr penibel in der onPause() Methode die sich schliessende Instanz der Activity beim Handler deregistrieren und dann die neue Instanz im onStart() wieder registrieren.

Es gibt auch eine Methode isFinishing() oder ähnlich, mit der man abfragen kann, ob eine Activity sich grade schliesst.
Evtl. könnte man auch so abfangen, dass dann die Anzeigekomponenten aktualisiert werden.

Grüße,
Rafael

— geändert am 20.01.2011, 13:23:44

Antworten
mcfly
  • Forum-Beiträge: 286

20.01.2011, 15:05:00 via Website

Danke vielmals für die Antworten.

Das mit der neuen Instanz ( Activity ) erklärt alles.
ich sollte schon beides haben ( Landscape und Portrait ). Am liebsten würde ich während dem Laden keinen Switch erlauben.
Das mit dem deregistrieren und registrieren tönt gut, aber ich weiss nicht ob ich das hinkrieg. Könnte ich das Switchen irgendwie verhindern ?

Grüsse McFly

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

20.01.2011, 19:28:16 via Website

Könnte ich das Switchen irgendwie verhindern ?

Du könntest versuchen, im manifest bei der betreffenden Activity [android:configChanges="orientation|keyboardHidden"] hinzuzufügen - dann wird die beim Wechsel nicht neu erzeugt; vielleicht löst das auch dein Ladeproblem

Antworten