2012-12-09 15 views
30

Dies kann eine dumme Frage sein, aber ich würde gerne wissen, wenn es klug ist zu verwenden bindService und wann zu verwenden startService.Wann ist Smart BindService zu verwenden und wenn StartService

Zum Beispiel:

Wenn ich bindService mit BIND_AUTO_CREATE verwenden, wird der Dienst automatisch gestartet werden und erstellt wie hier geschrieben steht: http://developer.android.com/reference/android/content/Context.html#BIND_AUTO_CREATE

Wann ist es klug, dann bindService zu verwenden und wenn startService? Ich verstehe diese zwei wirklich nicht richtig.

+0

Mögliche duplicate von [android service startService() und bindService()] (http://stackoverflow.com/questions/3514287/android-service-startservice-and-bindservice) –

Antwort

55

Sie verwenden in der Regel bindService() wenn Ihre Berufung Komponente (Activity) mit dem Service kommunizieren müssen, die Sie beginnen, durch die ServiceConnection. Wenn Sie nicht mit dem Service kommunizieren möchten, können Sie nur startService() verwenden. Sie können den Unterschied zwischen Dienst und Bindungsdienst sehen.

Aus der Dokumentation:

Gestartet

Ein Service "gestartet" wird, wenn eine Anwendungskomponente (zB eine Aktivität) beginnt es von Startservice() aufrufen. Einmal gestartet, kann ein Dienst unbegrenzt im Hintergrund ausgeführt werden, selbst wenn die Komponente, die ihn gestartet hat, zerstört wird. Normalerweise führt ein gestarteter Dienst eine einzelne Operation aus, und gibt kein Ergebnis an den Aufrufer zurück. Zum Beispiel könnte es eine Datei über das Netzwerk herunterladen oder hochladen. Wenn die Operation abgeschlossen ist, sollte der Dienst sich selbst stoppen.

Bound

Ein Dienst wird "gebunden", wenn ein Anwendungskomponente bindet durch bindService() aufrufen. Ein gebundener Dienst bietet eine Client-Server-Schnittstelle, die es Komponenten ermöglicht, mit dem Dienst zu interagieren, Anforderungen zu senden, Ergebnisse zu erhalten, und dies sogar über Prozesse mit Interprozesskommunikation (IPC). Ein gebundener Service wird nur so lange ausgeführt, wie eine andere Anwendungskomponente daran gebunden ist. Mehrere Komponenten können gleichzeitig an den Dienst gebunden werden. Wenn jedoch alle Komponenten getrennt werden, wird der Dienst zerstört.

Sie mehr hier lesen: Android Services, Bound Services

16

ich mit @Ovidiu Latcu einverstanden, aber mit einem wichtigen Hinweis: wenn gebunden Dienste verwendet, wird der Dienst beendet, wenn die Tätigkeit, die ihn gestartet wird beendet, (wenn es die einzige Aktivität ist, die an diesen Dienst gebunden ist).

Wenn Sie also Ihren Dienst im Hintergrund ausführen möchten, während sich die App im Hintergrund befindet (die Aktivität ist beispielsweise pausiert und für den Benutzer nicht sichtbar), müssen Sie den Dienst starten, ohne ihn zu beschränken und zu kommunizieren mit ihm zum Beispiel mit BroadcastReceiver.

+0

nette Informationen –

+0

auch Sie können den Dienst starten und später daran gebunden - so wird es weiterlaufen, bis der Stopp aufgerufen wird. – benchuk

+1

Ich würde erwägen, das Ergebnis (mit 'BroadcastReceiver' oder einer anderen Alternative) von einem Dienst zu bekommen, der nur mit' startService() 'gestartet wurde und es gibt keine Bindung zwischen ihm und den Clients als ** schlechte Praxis ** weil, wie Ovidiu Latcu zitiert, ein ** gestarteter ** Dienst liefert normalerweise kein Ergebnis_ an den Aufrufer (Clients), im Gegensatz zum ** gebundenen ** Dienst, der eine Client-Server-Schnittstelle bietet, die es Komponenten ermöglicht, mit dem Dienst zu interagieren, senden Anfragen, _erhaltene Ergebnisse _.... – Eido95

Verwandte Themen