Ich ahnte schon, dass ich bezüglich der sexistischen Kackscheiße noch einen Kommentar ernten werde. 
Vermutlich funktioniert dein Puzzle wie folgt: du hast bereits x Bilder im Bundle oder auf dem Dateisystem. Während deine App läuft, lädt sie die Bilder im Hintergrund herunter und packt sie dann ins Dateisystem. Solange die Bilder nicht da sind, werden sie deinem Spiel auch nicht als neues Bild angeboten und es sieht auch niemand einen "Bild <Vorschau> steht jetzt zum Puzzlen bereit!" Dialog.
In meinem Fall ist das ein bisschen anders. Würde ich die heruntergeladenen Daten sequenziell ablegen, würde der Speicherplatz explodieren.
Man könnte sagen, die Anwendung soll diverse RSS-Feeds von diversen Servern ziehen - inklusive Bilder, Videos, Musik und was da noch alles dran hängt.
Diese Daten können an Aktualität verlieren, weshalb ich alte Informationen löschen und nur die neuen Informationen ablegen möchte.
Um das alles möglichst ressourcenschonend zu gestalten, habe ich mir folgende Abläufe überlegt:
- der Download der RSS/XML wird nur ein einziges mal gestartet, nämlich in der OnCreate der Launch-Activity (eine Art SplashScreen)
- dann wird eine ID mit der gespeicherten letzten ID verglichen
- sind die IDs unterschiedlich, werden die Inhalte dieser XML zum Aktualisieren vorgemerkt
(Das Ganze passiert aktuell 1 bis 12 mal für 1 bis 12 Dateien auf 1 bis 12 Servern mit je 1 bis 12 MB Dateigesamtgröße)
- dem User werden die zum Aktualisieren vorgemerkten Informationen gezeigt und er wählt via Checkbox einzelne Aktualisierungen an und ab
- anhand dieser Auswahl werden die vorhandenen Detailinformationen vom Dateisystem gelöscht
- anschließend werden die Detailinformationen gemäß der Auswahl heruntergeladen und in das Dateisystem gepackt (Pre-Rendered HTML, Bilder, Sounds, Videos...)
Im ersten Schritt darf das UI nicht blockieren, da hier viel schief gehen kann. Doch die Anzeige der Informationen soll am Ende aller Downloads erfolgen, unabhängig der Activity.
Ab diesem Punkt können mir viel zu viele Unbekannte passieren:
- das ListView wird aus einer SQLite Datenbank generiert (da XML parsen arschlahm sein kann), welche mitten drin gelöscht und neu bespielt worden sein kann
- die Detailansicht verzweigt auf die Daten im Dateisystem, welche gerade gelöscht, verändert oder sonstwie manipuliert worden sein können
Das alles und noch viel mehr kann zu unvorhersehbarem Verhalten der Anwendung führen.
Deshalb möchte ich, dass sobald die ersten Informationen heruntergeladen wurden, ein AlertDialog zunächst den Download der vielen größeren Dateien visualisiert (natürlich abbrechbar) und anschließend sämtliche Änderungen an der Datenbank und dem Dateisystem mittels Kreisel darstellt.
Der User sieht also, dass er diese App gerade nicht benutzen kann (anstatt sie zu benutzen und feststellen zu müssen, dass gerade irgendwas schief ging).
---
Mit dem Blockieren der UI meinte ich, dass meine SplashScreen Activity gezeigt wird solange die RSS/XML Datei heruntergeladen wird. Im Allgemeinen ist das wurscht, da die Files echt winzig sind. Im Speziellen (Server nicht erreichbar) zeigte sich dieser Splashscreen allerdings 10 Minuten. Das soll so nicht sein.
Also eigentlich suche ich nach wie vor nur nach einer Möglichkeit, nach erfolgreichem Download aller RSS/XML Dateien im Hintergrund einen Dialog anzuzeigen - unabhängig der aktuellen Activity. +sigh+
Nun, vielleicht bleibt die aufrufende Activity aber auch so lange im Speicher, dass ich dort einfach den UIThread als Instanzvariable mitgeben kann und dem Ding dann die gewünschten Methoden zuposte. Mal herumprobieren.