2010-12-10 9 views
0

Hier ist mein Szenario: Ich muss eine Android-Anwendung schreiben, die zwei Ticker auf einem Bildschirm (z. B. Newsticker und Börsenticker) anzeigt. Die Daten für beide Ticker stammen von separaten URLs. Ich versuche eine effiziente Lösung zu finden. Also hier ist mein Ansatz so weit
Design-Frage in Bezug auf mehrere GUI-Komponente aktualisieren Szenario

Erstellen Sie separate Klasse, um Daten von URLs (Nachrichten und Ticker) zu holen. Diese Klassen sollten vollständig für das Abrufen der Daten vom Server verantwortlich sein sowie für das Aktualisieren der Daten auf der UI-Komponente, die in der Aktivität definiert ist.

Also ich denke, jeder der Klasse sollte 2 private innere Klasse (Threads) haben, um Daten vom Server zu holen und ein anderes, um die GUI zu aktualisieren. Sobald der Abruf-Thread alle Daten erhält, beginnt der Anzeigethread, ihn in der GUI-Komponente zu zeichnen.

Meine Frage ist

  1. Ist das ein richtiger Ansatz? Ich denke, das könnte funktionieren, aber ich versuche zu finden, ob es eine bessere Möglichkeit gibt, Dinge zu tun, wie die Verwendung von AsyncTask usw. brauchen Expertenrat hier.

  2. Ich möchte nicht, die Referenz von GUI-Komponenten (Textview) von Aktivität passieren Klasse Thread (versuchen zu entkoppeln), so dass ich dachte an Instanz Handler zu diesen Klassen von
    Aktivität vorbei. Auf diese Weise kann die interne Thread-Klasse eine Nachricht im Handler posten und dann in Activity kann ich die Nachricht vom Handler abrufen, um die GUI-Komponente zu aktualisieren. Ist es in Ordnung, die Referenz des Handlers zu Thread übergeben. Soll es so gemacht werden?

Ich bin völlig in Ordnung, mit dem oben beschriebenen Ansatz zu ändern, wenn es eine bessere Art und Weise ist, so lassen Sie es mich wissen, wie Sie dieses Problem angehen würden.

Dank

Antwort

1

Also ich denke, jeder der Klasse 2 private innere Klasse (Threads) haben sollte man Daten vom Server zu holen und eine andere, die GUI zu aktualisieren. Sobald der Abruf-Thread alle Daten erhält, beginnt der Anzeigethread, ihn in der GUI-Komponente zu zeichnen.

Nein. Sie können die GUI nicht von einem Hintergrundthread aus ändern. Sie benötigen einen Hintergrund-Thread zum Herunterladen und Parsen der Daten. Sie benötigen nicht nur einen Hintergrundthread für die Aktualisierung der GUI, aber es wird Ihnen nichts nützen.

Ich denke, das könnte funktionieren, aber ich versuche zu finden, ob es eine bessere Möglichkeit gibt, Dinge zu tun, wie die Verwendung von AsyncTask usw. brauchen Expertenrat hier.

AsyncTask ist eine Möglichkeit, und ist wahrscheinlich eine Verbesserung gegenüber einfachen Threads. Mit einem IntentService ist ein anderer Ansatz. Die Schwierigkeit bei Threads oder AsyncTasks in der Aktivität ist, dass der Umgang mit Konfigurationsänderungen (Rotation, Dock/Abdock, etc.) nervig wird. Mit einem IntentService und einem Messenger kann das rationalisieren. Here is a sample application demonstriert diese Technik.

Ist es in Ordnung, den Verweis des Handlers zu Thread zu übergeben.

Ja.

Soll das so gemacht werden?

Solange der Handler ein Datenelement der Aktivität ist (so wird es nicht Müll gesammelt, etc.), ja. AsyncTask verbirgt das vor Ihnen, so dass Sie sich um dieses Problem nicht kümmern müssen.