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
Activityschicken. -
Arbeitsanfragen werden nacheinander ausgeführt. Wenn ein Vorgang in einem
IntentServiceund Sie senden eine weitere Anfrage, wartet die Anfrage, bis ist der erste Vorgang abgeschlossen. -
Ein Vorgang, der auf einem
IntentServiceausgefü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(). IntentServicedefinieren 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