ProgressDialog wird blockiert/nicht dargestellt

  • Hi,


    ich habe hier ein lustiges Problem mit einem ProgressDialog, der einfach nicht dargestellt wird. Lediglich im Debugger beim Singlestepping poppt er manchmal auf, aber aktualisiert wird er nie.


    Die ganze Story:


    Ich habe eine von View abgeleitete Klasse "DrawCanvas", in der in die onDraw()-Methode überschreibe, um darin ein paar Grafiken darzustellen. Mein erster Ansatz war so, dass ich aus der Activity heraus aus einem onClick()-Handler (Button-click des Users) eine Methode innerhalb dieser Klasse DrawCanvas aufgerufen habem welche mir die Grafiken aus dem Netz lädt um sie dann zu zeichnen. Zum Beginn dieser Download-Methode wird eine Message an einen Handler innerhalb der Activity gesendet, welche das Erzeugen und Öffnen des Progressdialoges veranlasst, während des Downloads wird der Downloadfortschritt ebenfalls per Message-Objekt an den Handler im ProgressDialog aktualisiert.


    Nachdem weder der ProgressDialog noch dessen Statusaktualisierungen sichtbar geworden sind, jabe ich mir gedacht, dass sich die GUI irgend wie selbst blockiert, da alles aus dem onClick()-Event heraus aufgerufen wird. Also habe ich den Code so abgeändert, dass onClick() einen neuen Thread erzeugt und die Download-Methode meines DrawCanvas nur aus der run()-Methode dieses Threads heraus aufgerufen wird. onClick() kehrt also unverzüglich zurück während die eigentliche Arbeit anschließend aus diesem separaten Thread heraus erledigt wird. Allerdings bringt das keinerlei Verbesserung.


    Bereits überprüft und als Fehlerursache ausgeschlossen:
    - die Messages zum Öffnen/Aktualisieren werden ordnungsgemäß abgeschickt, empfangen und verarbeitet
    - der Thread läuft tatsächlich, er wird also korrekt mit start() gestartet
    - alle GUI-Aktivitäten werden aus dem Handler heraus im Kontext des GUI-Threads ausgeführt, hier gibt es also keine doofe Exception


    Woran kann das jetzt noch liegen, dass mein ProgressDialog nicht zu sehen ist?

  • Hmm Glaskugel, Glaskugel --


    wenn andere Sachen (Textview, Canvas ect) aus deinem Aufrufskonstrukt veränderst werden, dann funktioniert das ??? (also nicht der ProgressDialog)


    bist du im richtigen Context unterwegs ??? (zur Not mal per getApplicationContext() ganz hart )


    Und noch ein ganz abwegiger Ansatz, hast du im Theme an deinen Dialog EInstellungen was verändert ???
    Hat er eventl ein Layout Problem???


    Läuft irgendwo eine Routine durch wo noch ein unbedachtes Dismiss steht ????


    Fragen über Fragen


    so ganze ohne Code wird es wohl ein Rätsel bleiben.

  • so ganze ohne Code wird es wohl ein Rätsel bleiben.


    Selbst in komprimierter Fassung ist das nicht wenig Code, also sage nicht, ich hätte dich nicht gewarnt ;)


    Der Ablauf beginnt mit dem Aufruf von updateTiles() (aus einem onClick()- bzw. einem Positions-Event heraus) in der Activity:



  • Hmm sehr sehr merkwürdig und alles andere was du in deinem Handlerkonstrukt manipulierst funktioniert ???
    Wenn du sagst im Singlestepping popt der Dialog auf. -> was sagt dir denn da der Debugger, inhalte der andern Vars.
    Kann ja dann nur der Dismiss relativ zeitnah erfolgen deswegen für das Auge nicht wahrzu nehmen.

  • Sehr viel mehr passiert in dem Handler nicht. Und beim Singlestepping geht der Dialog zwar auf, aber die Progress-Updates sind dann schon nicht mehr zu sehen, sprich der Dialog ist komplett blockiert. Der Ablauf scheint auch korrekt zu sein, es dauert mehrere Sekunden bis zum Dismiss (was sich im Debugger auch so nachvollziehen lässt).


    Die kompletten Sourcen gibt es übrigens hier: http://libwlocate.git.sourcefo…cb4abae0e0a3adf9c;hb=HEAD

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!