823 Stimmen

Dienst vs. IntentService auf der Android-Plattform

Ich suche ein Beispiel für etwas, das man mit einer IntentService die nicht mit einer Service (und vice versa)?

Ich glaube auch, dass ein IntentService läuft in einem anderen Thread und ein Service nicht. Soweit ich sehen kann, ist das Starten eines Dienstes innerhalb seines eigenen Threads also wie das Starten eines IntentService . Ist das richtig?

12voto

Sayooj Valsan Punkte 526

IntentService

IntentService läuft auf seinem eigenen Faden. Er stoppt sich selbst, wenn er fertig ist. Mehr wie Feuer und Vergessen. Nachfolgende Aufrufe werden in eine Warteschlange gestellt. Gut für Warteschlangenaufrufe. Sie können auch mehrere Threads innerhalb von IntentService Sie können dies erreichen, wenn Sie ThreadPoolExecutor . Ich sage das, weil mich viele Leute gefragt haben, "warum man IntentService da es die parallele Ausführung nicht unterstützt". IntentService ist nur ein Faden. Sie können darin tun, was Sie wollen - sogar mehrere Threads spinnen. Die einzige Einschränkung ist, dass IntentService ist beendet, sobald Sie diese mehreren Fäden gesponnen haben. Es wird nicht gewartet, bis diese Threads zurückkommen. Darum müssen Sie sich kümmern. Ich empfehle daher die Verwendung von ThreadPoolExecutor in diesen Szenarien.

  • Gut zum Synchronisieren, Hochladen usw.

Dienst

Standardmäßig Service läuft auf dem Hauptthread. Sie müssen einen Worker-Thread spinnen, um Ihre Arbeit zu erledigen. Sie müssen anhalten service ausdrücklich. Ich habe es für eine Situation verwendet, in der man Dinge im Hintergrund laufen lassen muss, auch wenn man sich von seiner App entfernt und für eine Headless-App wieder zurückkommt service .

  • Auch hier können Sie mehrere Threads laufen lassen, wenn Sie dies benötigen.
  • Kann für Anwendungen wie Musik-Player verwendet werden.

Sie können jederzeit mit Ihrer Aktivität kommunizieren, indem Sie BroadcastReceivers wenn Sie es müssen.

9voto

njzk2 Punkte 38000

Ein IntentService ist eine Erweiterung eines Dienstes, die dazu dient, die Ausführung einer Aufgabe zu erleichtern, die im Hintergrund und in einem separaten Thread ausgeführt werden muss.

IntentService startet, erstellt einen Thread und führt seine Aufgabe in diesem Thread aus. Sobald er fertig ist, wird alles aufgeräumt. Es kann nur eine Instanz eines IntentService zur gleichen Zeit laufen, mehrere Aufrufe werden in eine Warteschlange gestellt.

Es ist sehr einfach zu bedienen und sehr praktisch für viele Zwecke, zum Beispiel zum Herunterladen von Daten. Aber er hat Einschränkungen, die dazu führen können, dass Sie stattdessen den einfacheren (nicht einfachen) Dienst verwenden möchten.

Zum Beispiel kann ein Dienst, der mit einem xmpp-Server verbunden und an Aktivitäten gebunden ist, nicht einfach mit einem IntentService durchgeführt werden. Sie werden am Ende ignorieren oder überschreiben IntentService stuffs.

6voto

user3764748 Punkte 111

Wenn mir jemand ein Beispiel für etwas zeigen kann, das man mit einer IntentService und kann nicht mit einer service und andersherum.

IntentService kann nicht für Long Time Listening verwendet werden, wie bei XMPP-Hörern, es ist ein einmaliger Operator, der seine Arbeit erledigt und sich dann verabschiedet.

Außerdem hat er nur einen Fadenführer, aber mit einem Trick kann man ihn unbegrenzt nutzen.

5voto

Narendrakumar Punkte 163

Der Hauptunterschied zwischen einer Service und ein IntentService wird wie folgt beschrieben:

Dienstleistung :

1.A Service läuft standardmäßig auf dem Hauptthread der Anwendung (hier ist kein Standard-Worker-Thread verfügbar), so dass der Benutzer einen separaten Thread erstellen und die erforderliche Arbeit in diesem Thread ausführen muss.

2. erlaubt mehrere Anfragen gleichzeitig (Multi Threading)

IntentService :

1. jetzt kommen wir zu IntentService Hier steht ein Standard-Worker-Thread zur Verfügung, um jede Operation durchzuführen. Beachten Sie, dass - Sie müssen Folgendes umsetzen onHandleIntent() Methode, die die Absicht für jede Startanforderung empfängt, wo Sie die Hintergrundarbeit erledigen können.

2. aber es ist jeweils nur eine Anfrage möglich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X