Frage zur Progress Dialog

R

r4in

Ambitioniertes Mitglied
3
Hi Leute,

in vielen Tutorial wird der Progressdiolag mit einem Thread beschrieben, diese Tuts funktionieren auch bei mir sofort. Sie sind so aufgebaut

Progressdialog.show()

Thread läuft /bzw schläft ne Zeit

Progressdialog.dismiss()

da funktioniert es auch so wie es sein soll.

Jetzt hab ich aber eine Methode die mir Sachen vom Server lädt und wärend diese Wartezeit möchte ich einen Progressdialog für den User anzeigen lassen. Ich gehe da genauso vor wie in dem Tutorial.

Progressdialog.show()

Methodenaufruf()

Progressdialog.dismiss()

ABER bei mir erscheind der PD immer nur, wenn die Methode schon abgearbeitet worden ist und die Daten schon angekommen sind. Wo ist mein Denkfehler?

Danke Sebastian
 
Offenbar wird dein Code innerhalb des UI Threads ausgeführt.

Du musst dein Methodenaufruf() in einem eigenen Thread ausführen, sodass die UI wieder zum Zuge kommt, bevor die Methode fertig ist.
 
Zuletzt bearbeitet:
Ganz einfach: Änderungen an der Oberfläche werden erst durchgeführt, wenn 'ne Funktion im UI-Thread abgearbeitet wurde. Mal abgesehen davon, dass deine Variante einen "Die Anwendung reagiert nicht"-Dialog geradezu provoziert, weil die Funktion vermutlich etwas länger dauert...
show() und dismiss() müssen also in unterschiedlichen Methoden aufgerufen werden. Üblicherweise wird dismiss() über einen Thread oder Service-Callback angestoßen. Da beides nicht im UI-Thread läuft, muss das über Handler.run() dort eingereiht werden.
Wichtig ist auch, das Thread- bzw. Service-Handling beim Pausieren und Stoppen der Activity zu beachten. Ein Thread sollte abgebrochen werden, ein Service kann auch weiterlaufen, dann muss man aber darauf achten, den ProgressDialog im onResume/onStart wieder anzuzeigen. Und Referenzen auf den ProgressDialog unbedingt spätestens im onStop aufräumen (myProgDlg = null), sonst kann's zu Speicherlöchern durch interne Cross-Referenzen kommen. Böse Falle dabei ist übrigens auch, dass bei Konfigurationsänderungen (z.B. Drehen des Geräts) standardmäßig die Activity komplett neu gestartet wird.
 
Ahh, ok ich werde es mit Handler mal probieren. Danke für die Hilfe!
 

Ähnliche Themen

M
Antworten
2
Aufrufe
626
Mozart40
M
A
Antworten
1
Aufrufe
582
swa00
swa00
R
  • Gesperrt
  • roland-senior
Antworten
2
Aufrufe
796
Fulano
Fulano
Zurück
Oben Unten