Warum Service nutzen, wenn es läuft im gleichen thread in android
Ich war durch Gebunden-Service im Android-Entwickler-website. Ich dachte, ich Verstand den Dienst genug, aber ich habe nur einen anderen Weg gefunden, der Anschluss-service durch einen Messenger
Klasse vor allem für die lokalen service. Dort bekam ich verwirrt. Vielleicht habe ich das Konzept falsch.
Hier ist mein Verständnis von Android Service
. Erstellen Sie einen Dienst, wenn
- Sie wollen separate Arbeitsplätze in der hintergrund.
- Sie wollen, machen es zu einem separaten Prozess.
- Sie wollen es in einem Lebenszyklus, die unabhängig von der Komponente, die es gestartet hat.
Verwirrung ist das erste Element in der Liste, die definition der hintergrund. Ist das nicht der hintergrund ein thread oder Prozess? Ich hätte nie gedacht, dass es laufen kann auf dem Haupt-thread.
Hier ist die Vorsicht der service in den dev-Seiten über.
Vorsicht: Ein service läuft im Haupt-thread von seiner hosting-Prozess—der Dienst erstellt nicht einen eigenen thread und nicht in einem separaten Prozess ausgeführt (sofern Sie nichts anderes angeben). Dies bedeutet, dass, wenn Ihr Dienst tun wird jede CPU-intensive arbeiten oder blockierenden Operationen (wie MP3-Wiedergabe oder Netzwerk), sollte man einen neuen thread erstellen innerhalb des Dienstes zu tun, die Arbeit. Durch Verwendung einer separaten thread, verringern Sie das Risiko der Anwendung Nicht mehr Reagiert (ANR) Fehler und die Anwendung der Haupt-thread kann bleiben, gewidmet, um die Interaktion der Nutzer mit Ihren Aktivitäten.
Fragen
- Warum geht man wählen, um die Nutzung des service, wenn die service-Funktion wird sowieso im Hauptthread ausgeführt?
- Müssen wir schreiben service nur zu blockieren, ANR, auch wenn das zeitaufwendig ist, geschieht in der main-thread? Übernimmt der Dienst ist nur für meine Anwendung.
- Gibt es praktische Fälle oder Gründe, warum Sie einen Dienst wie privat und läuft in den gleichen thread?
- der Hauptzweck der Dienste ist, dass Sie unterschiedliche Lebens-Zyklus als Ihre Aktivität-Lebenszyklus - also #3 gilt auch hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anwendung Haupt-thread nicht immer im UI-thread. Zum Beispiel, wenn
Activity
ist gestoppt, dieonStop()
aufgerufen wird, damit der UI-thread genommen wird, dassActivity
und zog in eine andere Tätigkeit innerhalb der gleichen oder einer anderen Anwendung. Jedoch bedeutet es nicht, dass die Anwendung nicht mehr aktiv ist, kann es weiterhin in den hintergrund, bis es geschlossen ist, entweder durch das Betriebssystem oder durch den Benutzer. Wer dann hält, dann läuft es im hintergrund? Es ist der Haupt-thread und nicht der UI-thread.Was sind Dienstleistungen
Warum service
Verwenden
IntentService
wenn Sie nicht wollen, zu hantieren mit der Verwaltung von threads, die auf Ihre eigenen. Andernfalls verwenden SieAsyncTasks
.Bitte Lesen Sie diesen ausgezeichneten Artikel zu verstehen, mehr im detail und auch Lesen Sie diese Antwort.
Service
undActivity
lifecycle callbacks passieren wird, auf dieser, einzigartigen, Haupt - /UI-thread (vorausgesetzt natürlich, wir reden über einen in-process -Service
).Kurz, Services ausgeführt wird, auf dem hintergrund der UI-thread.
Sie können Aufgaben wie client-server-Authentifizierung oder in eine Datenbank schreiben, wo die Aufgaben erledigt, die im hintergrund ohne grafische Benutzeroberfläche.
Aber, wenn Sie tun eine wirklich lange Bearbeitung der Aufgaben, die gefrieren der Oberfläche, verwenden Sie einen Dienst auf einem separaten thread.
z.B. eines Service auf einem separaten thread IntentService