Hintergrunddienst erstellen

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:

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