Intro: Ich habe 3 Aktivitäten, DashBoard
, Feed
und Events
. DashBoard wird beim Starten der Anwendung gestartet. Von dort kann der Benutzer zu Feed oder Events gehen.Separate Downloader-Klasse (separater Thread), auf die durch verschiedene Aktivitäten zugegriffen wird
Problem: Ich möchte einen Download (in einem separaten Thread, natürlich) initiieren, wenn die DashBoard
startet. Von dort aus kann der Benutzer zu Feed
oder Events
gehen, und der Download wäre in Bearbeitung oder bereits beendet. Die Aktivitäten Feed
oder Event
(welche immer in der Instanz geeignet sind) sollten benachrichtigt werden, dass der Download abgeschlossen ist und die Daten verfügbar sind. Was ist der beste Weg, dies zu erreichen?
Mein aktueller Code: Ich habe eine Downloader-Klasse DownloadHandler
, die von der DashBoard
Aktivität initiiert wird. Diese Klasse wird in einem separaten Thread heruntergeladen. Die Klasse verfolgt einen booleschen Wert namens completed
. Es wird in false
instanziiert und wenn der Download abgeschlossen ist, wird es in true
geändert.
Derzeit Meine Klassen Feed
oder Events
wird die Variable completed
alle 100 ms oder so in einem separaten Thread abfragen, so dass es den UI-Thread nicht blockiert. und wenn die completed
Variable true
wird, ruft sie eine Funktion in dieser spezifischen Klasse auf, die dann die Klasse DataHandler
für die heruntergeladenen Daten abfragt.
Das funktioniert, aber ich fühle mich wie meine Logik ist ein bisschen chaotisch und es muss eine bessere Möglichkeit, es zu tun. Weil ich zwei separate Threads verwende, einen zum Herunterladen, einen zum Abfragen der abgeschlossenen Variablen. Gibt es einen besseren Weg, dies zu tun?
Ich habe gelesen AsyncTask
und verschiedene Rückrufe, aber das Problem ist, ich kann einen Rückruf in einer bestimmten Klasse nicht angeben. Wenn der Download abgeschlossen ist, könnte die aktuelle Aktivität DashBoard
, Events
oder Feeds
sein. Es gibt keine Garantie, welche Aktivität nach dem Download am Ende steht.
https://github.com/rajeshcp/Android-Download-Manager, Sehen Sie dies im Grunde ist dies eine einzelne Tonne Klasse (DownloadManager), die kümmert sich um alle Ihre http-Aufrufe in Ihrer Anwendung, können Sie sich ansehen Dies ist die gleiche Sache, die ich in vielen meiner Anwendungen verwendet habe Dank – Triode
Ich fürchte, eine Download-Manager-Klasse ist nicht das, was ich benötige. Ich habe bereits eine funktionierende Download-Manager-Klasse. Ich brauche es nur, um auf eine Funktion zurück zu kommen, abhängig davon, welche Aktivität offen ist. –