Die Klasse IntentService
bietet eine einfache Struktur zum Ausführen
auf einen einzelnen Hintergrundthread. So können lang andauernde Vorgänge verarbeitet werden.
ohne die Reaktionsfähigkeit
Ihrer Benutzeroberfläche zu beeinträchtigen. Außerdem wird eine
IntentService
ist von den meisten Lebenszyklus-Ereignissen der Benutzeroberfläche nicht betroffen.
unter bestimmten Umständen, die eine AsyncTask
heruntergefahren hätten, weiterhin aktiv.
Ein IntentService
hat einige Einschränkungen:
-
Er kann nicht direkt mit Ihrer Benutzeroberfläche interagieren. Um die Ergebnisse auf der Benutzeroberfläche zu sehen,
müssen sie an
Activity
schicken. -
Arbeitsanfragen werden nacheinander ausgeführt. Wenn ein Vorgang in einem
IntentService
und Sie senden eine weitere Anfrage, wartet die Anfrage, bis ist der erste Vorgang abgeschlossen. -
Ein Vorgang, der auf einem
IntentService
ausgeführt wird, kann nicht unterbrochen werden.
In den meisten Fällen ist jedoch IntentService
die bevorzugte Methode,
einfache Hintergrundvorgänge ausführen.
In diesem Leitfaden erfahren Sie, wie Sie Folgendes tun:
- Erstellen Sie Ihre eigene abgeleitete Klasse von
IntentService
. - Erstellen Sie die erforderliche Callback-Methode
onHandleIntent()
. IntentService
definieren in Ihrer Manifest-Datei.
Eingehende Intents verarbeiten
Um eine IntentService
-Komponente für deine App zu erstellen, definiere eine Klasse, die
erweitert IntentService
und definiert darin eine Methode,
überschreibt onHandleIntent()
. Beispiel:
Kotlin
class RSSPullService : IntentService(RSSPullService::class.simpleName) override fun onHandleIntent(workIntent: Intent) { // Gets data from the incoming Intent val dataString = workIntent.dataString ... // Do work here, based on the contents of dataString ... } }
Java
public class RSSPullService extends IntentService { @Override protected void onHandleIntent(Intent workIntent) { // Gets data from the incoming Intent String dataString = workIntent.getDataString(); ... // Do work here, based on the contents of dataString ... } }
Die anderen Callbacks einer regulären Service
-Komponente wie
onStartCommand()
werden automatisch aufgerufen von
IntentService
In einem IntentService
sollten Sie Folgendes vermeiden:
diese Callbacks überschreiben.
Weitere Informationen zum Erstellen eines IntentService
finden Sie unter Erweitern des
IntentService-Klasse.
Intent-Dienst im Manifest definieren
Für IntentService
ist außerdem ein Eintrag in deinem Anwendungsmanifest erforderlich.
Diesen Eintrag als
<service>
-Element, das ein untergeordnetes Element von
<application>
-Element:
<application android:icon="@drawable/icon" android:label="@string/app_name"> ... <!-- Because android:exported is set to "false", the service is only available to this app. --> <service android:name=".RSSPullService" android:exported="false"/> ... </application>
Das Attribut android:name
gibt den Klassennamen der
IntentService
.
Beachten Sie, dass die
<service>
-Element kein
Intent-Filter. Die
Activity
, die Arbeitsanfragen an den Dienst senden, verwendet eine
explizit Intent
, daher ist kein Filter erforderlich. Dies gilt auch für
bedeutet, dass nur Komponenten in derselben App oder andere Anwendungen mit der
Nutzer-ID auf den Dienst zugreifen kann.
Mit der einfachen IntentService
-Klasse können Sie nun Arbeitsanfragen senden
mit Intent
-Objekten hinzu. Das Verfahren zum Erstellen dieser Objekte
Wie Sie sie an Ihr IntentService
senden können, erfahren Sie unter
Arbeitsanfragen an den Hintergrunddienst senden