1. Nimm jetzt an unserem AGM - Gewinnspiel teil - Informationen zum M1, A2 und A8 findest Du hier, hier und hier!
  1. r4in, 10.05.2011 #1
    r4in

    r4in Threadstarter Android-Hilfe.de Mitglied

    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
     
  2. DieGoldeneMitte, 10.05.2011 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    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: 10.05.2011
  3. Mort, 10.05.2011 #3
    Mort

    Mort Android-Lexikon

    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.
     
  4. r4in, 10.05.2011 #4
    r4in

    r4in Threadstarter Android-Hilfe.de Mitglied

    Ahh, ok ich werde es mit Handler mal probieren. Danke für die Hilfe!