2010-11-28 5 views
4

Ich kann mehrere Beispiele finden, wie man einen Dienst erstellt, aber ich habe eine schwierige Zeit, ein funktionierendes Beispiel zu finden, wie Nachrichten zwischen einer Aktivität und einem Dienst gesendet werden. Von dem, was ich finden kann, denke ich, meine Optionen sind Intents, AIDL, oder das Service-Objekt selbst zu verwenden, wie this question.Android-Dienst-zu-Aktivität-Kommunikationsleistung

In meinem Fall ist meine Aktivität die einzige Aktivität, die jemals auf den Dienst zugreifen wird, also wird ein lokaler Dienst tun. Wenn die Aktivität geöffnet ist, möchte ich einige Statusmeldungen vom Dienst sehen, die bis zu 20 Hz eintreffen. Gibt es Einschränkungen hinsichtlich der Anzahl der Nachrichten pro Sekunde, die diese Kommunikationsmethoden unterstützen? Grundsätzlich, welche Methode wird für meine Situation am besten sein?

Danke.

Antwort

4

Da Ihre Aktivität und Ihr Dienst Teil derselben App sind, müssen Sie AIDL nicht verwenden. Sie können einfach use your Service as a local one.

+0

Das Beispiel für den lokalen Dienst auf dieser Seite erklärt sehr gut, wie ein Dienst erstellt wird, zeigt jedoch nicht, wie zwischen dem Dienst und der Aktivität zu kommunizieren ist. Kann ich die Messenger-Klasse wie im Beispiel des Remote Messenger-Diensts verwenden, während Sie sich in einem lokalen Dienst befinden? –

+1

Update: Sieht aus wie Messaging in einem lokalen Dienst funktioniert. –

+0

erklären Sie nicht den Dienst zur Aktivitätskommunikation – Atma

1

Die Einschränkung wird nur von der Leistung Ihres Geräts beeinflusst. Es gibt keine Obergrenze für Anfragen pro Sekunde. Normalerweise ist ein Kontextwechsel beteiligt, der ziemlich viel CPU verbraucht (verglichen mit anderen Teilen der Übertragung), aber da Sie einen lokalen Dienst verwenden, leiden Sie darunter nicht. In jedem Fall ist 20Hz kein Problem. Die beste Lösung für Sie wäre, AIDL zu verwenden und einen Rückruf einzurichten, den der Dienst aufrufen kann, um seinen Status zu melden.

Es gibt ein gutes Beispiel dafür, wie dies in den APIDemos gemacht wird.