2017-07-19 2 views
0

Ich möchte eine Bibliothek erstellen, die einen Dienst hat, um Werte von Temperatursensoren zu lesen und einige Verarbeitungen durchzuführen. Der Service wird bei der Überwachung der Sensorwerte gehalten und gibt eine Warnung aus, wenn ein hoher Wert erkannt wird. Ich möchte mehrere Apps mit dieser Bibliothek erstellen. Ich plane, meine Bibliothek als eine Abhängigkeit zu jeder App hinzuzufügen und wenn eine App meinen Dienst "TemperatureService" gestartet hat, sollten die anderen Apps denselben Dienst konsumieren, ohne einen neuen zu erstellen.Wie man einen sharable Dienst unbegrenzt in android laufen lässt?

Weiter, wenn der Dienst gestartet wird, sollte es unbegrenzt laufen. Und wenn ich in Zukunft eine neue App starte, sollte es in der Lage sein, an den aktuell laufenden Dienst zu binden.

Ich habe versucht, den IntentService zu verwenden, aber wenn ich meine App töte, stoppt der Dienst auch.

Intent i = new Intent(this.getBaseContext(), MyTestService.class); 
i.putExtra("foo", "bar"); 
startService(i); 

Wie kann ich mein Problem lösen?

Antwort

1

sollten Sie begonnen Service nutzen eher IntentService verwenden, da sich Intent-Service stoppt nach getaner Arbeit.

Also, wenn Sie kontinuierlich Dienst ausführen möchten, müssen Sie Service erstellen und mit Rückgabewert STICKY von OnServiceConnected() Methode, die Callback-Methode in Service-Klasse ist.

Und für die Kommunikation über mehrere Anwendungen, müssen Sie AIDL implementieren und teilen Sie die gleiche Schnittstelle für die Kommunikation mit Ihrer Anwendung.

Android Interface Definition Language (AIDL)

AIDL Implementierung

Dienstleistungen implementiert

IPC in android

Lokale Aufruf implementiert

Android Interface Definition Language (AIDL) and Remote Service

Der obige Link enthält eine vollständige Demo zum Erstellen und Verwenden von Service und AIDL für die Interprozesskommunikation Beispiel zwei Anwendungen verwenden, aber Sie können mehrere Clientanwendungen erstellen.

+0

Wie kann ich den Dienst gemeinsam nutzen? Eine App könnte den Dienst starten und alle Apps starten, nachdem sie auf den gleichen Dienst zugreifen können. Aber wenn ich bindService von verschiedenen Apps aus anrufe, erstellt es eine neue Instanz des Dienstes. – chamathabeysinghe

+0

@chamathabeysinghe Siehe meine aktualisierte Antwort mit Link mit einer kleinen Demo. –

1

zu diesem Zweck Sie Android Interface Definition Language verwenden müssen, und die Interprozesskommunikation (IPC) für Detail folgen this

Verwandte Themen