2012-03-26 3 views
0

Ich habe eine kleine Lücke in meinem Wissen hier und ich möchte sicherstellen, dass ich es richtig mache, bevor ich den ganzen falschen Code schreibe.Wie kann ich ein Ereignis von Anwendung zu Aktivität in Android weitergeben?

Ich habe eine Android-App, die Anwendung erweitert, um einige Kernfunktionen für einen TCP-Client einzurichten. Es gibt ein paar verschiedene Activity Bildschirme, die mit Anwendung interagieren sollten. Was ich festhalte, ist, was zu tun ist, wenn ein Datenpaket von Anwendung empfangen wird. Ich möchte es an die derzeit sichtbare Aktivität weiterleiten, was auch immer es ist.

Ich stammt aus einem C# -Hintergrund, ich würde nur ein Ereignis in der Anwendung erstellen und einfach zu diesem Ereignisse abonnieren, wenn eine Aktivität erstellt wird. Aber ich bin verwirrt mit Java Listeners, Handler, ...

Was ist der beste Weg, um darüber zu gehen? Sollte ich stattdessen einen Service machen? (Aber es ist mir egal, wenn die TCP-Verbindung abgebrochen wird, wenn die App nicht angezeigt wird.)

Antwort

1

Ich würde mit einem LocalBroadcastManager (documentation) Ansatz gehen.

eine dieser Welpen erstellen in Ihrem Application Klasse und registrieren/deregistrieren Ihre Activity Objekte in onStart und onStop. Siehe Context.registerReceiver. Beachten Sie, dass dazu die Verwendung von Intent s erforderlich ist, was für Ihre Anwendung möglicherweise zu restriktiv/schwer ist. Das Packen/Entpacken von Daten kann mühsam sein.

Alternativ Sie müssen keine speziellen Android-Klasse verwenden, es zu tun - nur halten Spur von dem, was Activity Ihr Programm ist in durch Anrufe an Ihre Application in onStart und onStop. Könnte helfen, Ihren Code zu bereinigen, wenn Sie alle Ihre Aktivitäten von Interesse erweitern eine Unterklasse von Activity, die diese Logik enthält.

+0

Ich denke, Ihre zweite Idee ist wahrscheinlich gut für diese. Würde ich ein Handle für die "aktuelle" Aktivität in einer Kontextvariablen speichern und dann den Handler für diesen Kontext aufrufen, wenn ich Daten habe? Sind das die richtigen Bedingungen? – Adamlive

+0

Ich würde einen Schritt weiter gehen und es als 'Aktivität' speichern, denn dann hast du Zugang zu ein paar weiteren Methoden, die nützlich sein könnten, besonders wenn du von einem Hintergrunddienst kommst (z. B.' Activity.runOnUiThread'). Auf diese Weise ist kein 'Handler' nötig. – sastraxi

+0

Funktioniert bereits wie ein Champion. Verwenden von runOnUiThread wie vorgeschlagen. Vielen Dank! – Adamlive

Verwandte Themen