2012-03-26 2 views
0

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.

+1

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

+0

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. –

Antwort

1

Ich würde eine Sendung in meinem Download-Thread (Setting ein Intentionfilter dafür) und Registrierung Empfänger in Feeds und Events (vergessen Sie nicht, sie in OnStop()) abmelden. Ich benutze diese Lösung oft für diesen Zweck - es ist einfach und macht einen guten Job.

BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 
     } 
}; 

sollten Sie den Rest auf Ihrem eigenen :) ist nicht so schwer lösen. Es gibt viele Tuts dafür oder kaufen Sie ein Standardbuch, um in android zu kommen.

+0

klingt wie eine gute Idee. Könnten Sie mir ein Codebeispiel geben? Nur ein Überblick. So registrieren Sie einen Sendeempfänger in den Events und Feeds. Weil alle Beispiele, die ich im Internet sehe, eine separate BroadcastReciever-Klasse verwenden. –

+0

, wie sie gestern als Antwort akzeptiert wurde ...Eine intelligentere Lösung wäre eine abstrakte Klasse, die Aktivität erweitert, und Feed und Ereignisse, die diese abstrakte Klasse erweitern. Das Einrichten eines Listeners im Download-Thread und das Registrieren eines Listeners in onStart der abstrakten Aktivität (vergessen Sie nicht, die Registrierung in onPause aufzuheben) würde einen intelligenten Job erledigen. Aber der Broadcast-Ansatz macht auch einen guten Job und hat den Vorteil, dass die Aktivitäten nichts über den Lebenszyklus des Download-Threads wissen müssen. –

+0

Ja. Ich ging tatsächlich mit einem Sub-Pub-Muster mit den Aktivitäten und einer Singleton-Downloader-Klasse. Das ist insgesamt das gleiche wie das, was Sie gesagt haben. –

Verwandte Themen