1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Frage zur Progress Dialog

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von r4in, 10.05.2011.

  1. r4in, 10.05.2011 #1
    r4in

    r4in Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    88
    Erhaltene Danke:
    3
    Registriert seit:
    16.09.2010
    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

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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

    Beiträge:
    960
    Erhaltene Danke:
    262
    Registriert seit:
    16.11.2009
    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

    Beiträge:
    88
    Erhaltene Danke:
    3
    Registriert seit:
    16.09.2010
    Ahh, ok ich werde es mit Handler mal probieren. Danke für die Hilfe!
     

Diese Seite empfehlen