2012-12-23 17 views
6

Ich habe einen Dienst, der über AIDL mit anderen Diensten kommuniziert. Ich möchte, dass dieser Dienst an Aktivitäten in meiner Anwendung gebunden ist. Kann der Dienst zwei Bindes \ interfaces definieren? Ich habe versucht, einen Messenger für die Kommunikation mit den Aktivitäten zu verwenden, indem ich die "onBind" -Methode überschreibe, so dass sie einen anderen Binder entsprechend der beabsichtigten Absicht zurückgibt (eine für die anderen Dienste und eine für die Aktivitäten).kann ein Android-Dienst zwei Schnittstellen zur Kommunikation bieten?

Wenn die Aktivitäten (die den gleichen Binder verwenden) vom Dienst trennen, habe ich einen Fehler "myService hat ServiceConnection ... durchgesickert, das ursprünglich hier gebunden wurde", was ich glaube über den Ordner, den der Dienst verwendet mit den anderen Diensten kommunizieren.
Kann ein Dienst zwei Schnittstellen verwenden, wie kann ich die Kommunikation zwischen den Aktivitäten und diesem Dienst implementieren?

danke, -Liron

Antwort

0

AIDL und Messenger für IPC mit anderen Anwendungen/Prozessen eingesetzt. Vom Android API Guide:

Hinweis: AIDL Verwendung ist nur erforderlich, wenn Sie Kunden aus unterschiedlichen Anwendungen können für IPC für den Zugriff auf Ihren Service und wollen Multithreading in Ihrem Dienst zu behandeln. Wenn Sie keine gleichzeitige IPC für verschiedene Anwendungen durchführen müssen, sollten Sie Ihre Schnittstelle durch Implementieren einer Sammelmappe erstellen. Wenn Sie IPC ausführen möchten, aber nicht mit Multithreading arbeiten müssen, implementieren Sie Ihre Schnittstelle mit einem Messenger. Unabhängig davon sollten Sie Bound Services verstehen, bevor Sie eine AIDL implementieren.

Wenn sich Ihre Aktivitäten im selben Prozess wie der Dienst befinden, müssen Sie lediglich Binder erweitern.

Erweiterung der Binder Klasse

Wenn Ihr Service für Ihre eigene Anwendung privat und läuft im selben Prozess wie der Client (die üblich ist), sollten Sie Ihre Schnittstelle erstellen, indem Sie den Binder erstreckt Klasse und eine Instanz von es von onBind() zurückgegeben. Der Client empfängt die Sammelmappe und kann diese verwenden, um direkt auf öffentliche Methoden zuzugreifen, die in der Binder-Implementierung verfügbar sind, oder sogar auf den Dienst. Dies ist die bevorzugte Technik , wenn Ihr Dienst nur ein Hintergrundarbeiter für Ihre eigene Anwendung ist. Der einzige Grund, warum Sie Ihre Schnittstelle diese Weise nicht erstellen würden, ist, weil Ihr Dienst von anderen Anwendungen oder über separate Prozesse verwendet wird.

Diese Grafik des gebundenen Service-Lebenszyklus in Bezug auf kann helfen mit, wie Sie sind verbindlich/unbinding (http://developer.android.com/guide/components/bound-services.html#Lifecycle):

enter image description here

Verwandte Themen