-1

Meine App aktualisiert alle 2 Wochen eine Liste der Buslinien von der Transit-API im Hintergrund als Dienst und speichert die Liste in geteilten Voreinstellungen. Wenn der Benutzer die App zum ersten Mal startet, startet die App einen Dienst im Hintergrund, der die XML-Daten herunterlädt, parst und die Routen in der Datei sharedpreferences als ArrayList speichert.Wie kann dieser Hintergrundprozess beim Aktualisieren der Benutzeroberfläche am besten behandelt werden?

Die Launcher-Aktivität ist eine Map. Wenn der Benutzer beim ersten Start der App jedoch zur Aktivität "Liste aller Busrouten" navigiert, bleibt der Bildschirm leer, während der XML-Code analysiert wird. Wenn sie eine langsame Datenverbindung haben, bleibt sie für einige Zeit leer. Ich dachte daran, einen rotierenden Loader zu zeigen, während der Dienst fertig ist, bevor ich die Liste in der Benutzeroberfläche zeige, aber ich bin mir nicht sicher, wie ich den rotierenden Loader mit dem Hintergrunddienst synchronisieren soll. Irgendwelche Vorschläge, wie man dieses Problem angehen würde, würden sehr geschätzt werden.

Danke.

Antwort

0

Ich würde Broadcast Intents für die Kommunikation verwenden. Sie können eine ProgressBar in Ihrer UI haben, die standardmäßig ausgeblendet ist, aber Sie zeigen sie an, wenn die Daten noch nicht existieren. Sie registrieren einen BroadcaseReceiver in Ihrer Busroutenlistenaktivität (und heben die Registrierung an der entsprechenden Stelle auf), und Ihr Dienst kann die Broadcastabsicht senden, wenn sie fertig ist. Wenn nichts registriert ist, um es zu empfangen, wird es nicht behandelt. Wenn der beschriebene Fall jedoch auftritt, werden Sie benachrichtigt, dass die Daten jetzt bereit sind. Blenden Sie den Spinner aus, zeigen Sie die Daten an.

+0

Großartig! danke für deinen Beitrag. – Plex752