2016-05-19 7 views
1

Durch lokalen Service ist ich ein Service, der ist nur verbunden mit der Host-Anwendung. Es kann die Binder-Unterklasse-Version von Services verwenden oder es kann Messenger verwenden - es spielt keine Rolle. Außerdem werde ich nur Dienste berücksichtigen, die auf Hintergrundthreads ausgeführt werden, obwohl ich denke, dass dies unabhängig davon gilt.Unter welchen Bedingungen sind lokale Hintergrunddienste den Threads in Android vorzuziehen?

Ich habe versucht, den Wert der lokalen Dienste über einen einfachen Hintergrund Thread herauszufinden. Ich habe schon oft gesehen, dass die Hintergrund-Thread-Version Sie irgendwie mit dem Aktivitäts- oder Anwendungslebenszyklus verbindet und nur dann richtig ist, wenn Ihre Aufgabe nur ausgeführt werden sollte, wenn die App im Vordergrund ist ... aber ich sehe nicht, wie das ist wahr. Hintergrund-Threads sind AFAIK, die nicht mit dem Lebenszyklus ihres Erstellerkontexts in Beziehung stehen. Sie tun nicht oder etwas ähnliches.

Service beschreibt eine "Lifecycle-API", die eine externe (Client-) Kontrolle des Service erlaubt. Sie können also beispielsweise stopService anrufen und das Kill-Verhalten in Service.onStop implementieren, anstatt Ihre eigene API zu schreiben. Aber der Lebenszyklus ist so trivial-einfach, dass dies wie mehr Komplexität erscheint, nicht weniger. Zum Beispiel müssen stopService und onStop nicht zwei verschiedene Methoden in einer einfachen lokalen Implementierung sein.

Ich würde besonders gerne von echten Anwendungsfällen hören, in denen ein lokaler Dienst einem Thread wirklich vorzuziehen ist.

Antwort

0

Zunächst einmal ändert sich der Service killing order Ihres Prozesses.

Für eine Aufgabe "Feuer und Vergessen" ist alles ziemlich einfach, echter Spaß kommt mit Thread-Kommunikation. Die regulären Java-Mechanismen - Pipes, Shared Memory, Blocking Queues - sind für Android-Anwendungen verfügbar, erschweren jedoch den UI-Thread aufgrund ihrer Blockierungsneigung. Daher definiert die Android-Plattform ihre eigenen Helfer.

BTW, "Hintergrund" -Dienst startet standardmäßig im Hauptthread, für echte Hintergrundarbeit müssen Sie immer noch Threads verwenden.