Background Service — was ist das, Typen und Funktionsweise in Android

Autor: IT Sectr Veröffentlicht: 2026-03-27 Lesezeit: 8 Min.

Background Service ist eine Android-Komponente, die für die Ausführung langlebiger Operationen im Hintergrund ohne Benutzeroberfläche entwickelt wurde. Im Gegensatz zu Activity arbeitet Service weiter, auch wenn die App minimiert wurde oder der Benutzer zu einer anderen App gewechselt ist. Laut Android Developers, 2026 gibt es drei Arten von Diensten: Started Service, Bound Service und Foreground Service, jeweils mit eigenem Lebenszyklus und Anwendungsbereich.

Das Wichtigste

  • Background Service ist eine Android-Komponente für Hintergrundoperationen ohne UI, die unabhängig von einer Aktiviteit arbeitet.
  • Started Service wird über startService gestartet und läuft bis zum expliziten Stopp über stopSelf.
  • Bound Service bindet sich über bindService an eine Komponente und lebt, solange es verbundene Clients gibt.
  • Foreground Service zeigt eine dauerhafte Benachrichtigung an und wird bei niedrigem Akkustand nicht vom System beendet.
  • Seit Android 8 gelten strenge Einschränkungen für den Start von Hintergrunddiensten.

Was ist Background Service in Android?

Background Service (oder einfach Service) ist neben Activity, BroadcastReceiver und ContentProvider eine der vier grundlegenden Komponenten einer Android-App. Im Gegensatz zu Activity hat Service keine visuelle Oberfläche und ist für Operationen konzipiert, die unabhängig davon fortgesetzt werden müssen, ob die App im Vordergrund ist oder nicht.

Service läuft im Hauptthread der Anwendung, daher erfordern blockierende Operationen innerhalb des Dienstes die Erstellung eines separaten Threads. Andernfalls löst das System ANR (Application Not Responding) aus. Für einfache Hintergrundoperationen bietet Android IntentService an, der automatisch einen Worker-Thread erstellt. In modernen Projekten wird empfohlen, Kotlin-Coroutinen mit CoroutineScope innerhalb des Service für asynchrone Verarbeitung ohne Blockierung des Hauptthreads zu verwenden.

Der Hauptzweck von Service ist Musikwiedergabe, Dateidownload, Netzwerkanfragen, Datensynchronisation und andere Aufgaben, die fortgesetzt werden müssen, nachdem der Benutzer die App verlassen hat. Seit Android 8 müssen Entwickler jedoch bewusst zwischen den Servicetypen wählen und dabei die Einschränkungen der Hintergrundarbeit berücksichtigen.

Wie funktioniert der Service-Lebenszyklus?

Service hat seinen eigenen Lebenszyklus, der sich von Activity unterscheidet. Er umfasst vier Schlüsselmethoden: onCreate, onStartCommand, onBind und onDestroy. Das Verständnis dieses Zyklus ist für die korrekte Implementierung von Hintergrundaufgaben ohne Speicherlecks unerlässlich.

onCreate und onStartCommand

Die Methode onCreate wird bei der Erstellung des Dienstes einmalig aufgerufen. Hier werden Ressourcen wie Timer, Datenbankverbindungen und Sockets initialisiert. Die Methode onStartCommand wird jedes Mal aufgerufen, wenn startService aufgerufen wird, wodurch Befehle an einen bereits laufenden Dienst gesendet werden können. Der Rückgabewert bestimmt das Systemverhalten beim Neustart.

kotlin
class DownloadService : Service() {

    override fun onCreate() {
        super.onCreate()
        initializeDownloader()
    }

    override fun onStartCommand(
        intent: Intent?,
        flags: Int,
        startId: Int
    ): Int {
        downloadFile(intent?.getStringExtra("url"))
        return START_STICKY
    }

    override fun onBind(intent: Intent): IBinder? = null
}

onBind und onDestroy

onBind wird beim Binden des Dienstes über bindService aufgerufen und gibt ein IBinder-Objekt für die Client-Interaktion zurück. Diese Methode wird nur für Bound Service verwendet. onDestroy ist der letzte Aufruf vor der Zerstörung des Dienstes. Hier werden alle Ressourcen freigegeben, Threads gestoppt und Aufgaben abgebrochen.

Arten von Hintergrunddiensten

Android bietet drei Arten von Service, die jeweils für ihr eigenes Szenario konzipiert sind. Die Wahl des falschen Typs kann zu instabilem App-Verhalten oder Batterieverbrauch führen.

Started Service

Started Service wird durch Aufruf von startService gestartet und läuft, bis er stopSelf oder stopService aufruft. Er eignet sich für Aufgaben, die sofort ausgeführt werden müssen: Analytics senden, ein Bild verarbeiten, eine einzelne Datei herunterladen. Nach Abschluss seiner Arbeit stoppt der Dienst sich selbst.

Bound Service

Bound Service bietet eine Client-Server-Schnittstelle, die es einer Activity, einem Fragment oder einer anderen Komponente ermöglicht, mit dem Dienst zu interagieren. Der Dienst lebt, solange mindestens ein Client verbunden ist. Wenn alle Clients die Verbindung trennen, wird der Dienst zerstört. Bound Service eignet sich für Aufgaben, die eine bidirektionale Kommunikation erfordern: Musikplayer, Navigation.

Foreground Service

Foreground Service ist ein Started Service mit einer dauerhaften Benachrichtigung in der Statusleiste. Das System betrachtet einen solchen Dienst als aktiv und beendet ihn auch bei Speichermangel nicht. Foreground Service ist für Musikwiedergabe, Audioaufnahme, Standortverfolgung und andere für den Benutzer wichtige Aufgaben obligatorisch.

ParameterStartedBoundForeground
StartstartServicebindServicestartForeground
Lebensdauerbis stopSelfsolange Clients existierenbis stopForeground
Benachrichtigungneinneinerforderlich
Beendbarjajanein
BeispielDownloadPlayerMusik

Service erstellen und ausführen

Das Erstellen eines Dienstes beginnt mit der Deklaration einer Klasse, die von Service erbt, und ihrer Registrierung in der AndroidManifest.xml. Ohne Registrierung im Manifest kann das System den Dienst nicht starten, und jeder Aufruf von startService führt zu einer Ausnahme.

kotlin
// Registrierung in AndroidManifest.xml
@SuppressLint("ForegroundServiceType")
class SyncService : Service() {

    override fun onStartCommand(
        intent: Intent?,
        flags: Int,
        startId: Int
    ): Int {
        startForeground(
            NOTIFICATION_ID,
            createNotification()
        )
        performSync(intent)
        return START_NOT_STICKY
    }
}

Um einen Dienst aus einer Activity oder einem Fragment zu starten, wird ein Intent mit einem expliziten Verweis auf die Dienstklasse verwendet. Ab Android 8 ist für Foreground Service die Berechtigung FOREGROUND_SERVICE im Manifest erforderlich.

kotlin
// Started Service starten
val intent = Intent(this, SyncService::class.java)
intent.putExtra("action", "sync")
startService(intent)

// Foreground Service starten (Android 8+)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    startForegroundService(intent)
} else {
    startService(intent)
}

Einschränkungen in Android 8+

Ab Android 8 (API 26) hat Google strenge Einschränkungen für Hintergrunddienste eingeführt. Der Start von Hintergrunddiensten (wenn die App nicht im Vordergrund ist) ist nur in Ausnahmefällen erlaubt: beim Empfang einer Push-Benachrichtigung, nach dem Gerätestart oder über JobScheduler.

Für langlebige Aufgaben, die keine sofortige Ausführung erfordern, wird die Verwendung von WorkManager oder JobScheduler empfohlen. Wenn eine App wirklich einen laufenden Dienst benötigt, ist der einzige Weg ein Foreground Service mit einer für den Benutzer sichtbaren Benachrichtigung. Das Starten eines Dienstes ohne Benachrichtigung im Hintergrund wird vom System ignoriert.

JobIntentService für Abwärtskompatibilität

JobIntentService ist eine spezialisierte Klasse, die in der Support-Bibliothek für Android 5+ erschienen ist. Sie kombiniert das Verhalten von IntentService (automatischer Worker-Thread, sequenzielle Verarbeitung) mit der Planung über JobScheduler. Auf Android 8+ verwendet JobIntentService intern JobScheduler, auf älteren Versionen einen regulären Service. Dies ermöglicht eine einheitliche Handhabung von Hintergrundaufgaben ohne zusätzliche Android-Versionsprüfungen.

kotlin
class UploadJobService : JobIntentService() {

    companion object {
        private const val JOB_ID = 1000

        fun enqueueWork(context: Context, work: Intent) {
            enqueueWork(
                context,
                UploadJobService::class.java,
                JOB_ID,
                work
            )
        }
    }

    override fun onHandleWork(intent: Intent) {
        val fileUri = intent.getStringExtra("file_uri")
        // Wird in einem Hintergrundthread ausgeführt
        uploadFile(fileUri)
    }
}

Speicherverwaltung und Lecks in Service

Ein häufiges Problem bei der Arbeit mit Background Service sind Speicherlecks. Da ein Service länger leben kann als eine Activity, verhindern Referenzen auf die Activity innerhalb des Service (über Listener, Callback oder Broadcast) die Garbage Collection von UI-Komponenten. Für die Service-UI-Kommunikation wird die Verwendung von WeakReference, ViewModel oder LiveData empfohlen. Vergessen Sie nicht, in onDestroy alle Abonnements zu kündigen, Threads zu stoppen und Cursor zu schließen.

Service vs. WorkManager: Wann was wählen

Die Wahl zwischen Background Service und WorkManager hängt vom Szenario ab. Service eignet sich für Aufgaben, die sofort und kontinuierlich ausgeführt werden müssen: Musikwiedergabe, Audioaufnahme, GPS-Tracking. WorkManager ist besser für verzögerte, garantierte Aufgaben geeignet: Synchronisation, Analytics-Versand, Log-Upload. WorkManager überlebt Geräteneustarts, Service dagegen nicht. Service kann mit Benachrichtigung im Vordergrund sein, während WorkManager leise im Hintergrund arbeitet. In der Praxis kombinieren Entwickler beide Ansätze: Foreground Service für kritische Benutzeraufgaben und WorkManager für die Hintergrundwartung.

Android 12 führte das Flag android:foregroundServiceType ein, das die Angabe des Diensttyps erfordert: dataSync, camera, connectedDevice, location, mediaPlayback und andere. Eine falsche Typangabe führt beim Start zu einer Ausnahme. Diese Praxis macht Background Service sowohl für den Benutzer als auch für das System transparenter.

Beispiel der Service-Registrierung in AndroidManifest

Die korrekte Service-Registrierung im Manifest umfasst das exported-Attribut (Zugänglichkeit für externe Apps), den foregroundServiceType (Hintergrunddiensttyp ab Android 12+) und die Berechtigung. Für Bound Service muss für JobIntentService auch android:permission="android.permission.BIND_JOB_SERVICE" deklariert werden. Ohne Registrierung im Manifest führt jeder startService- oder bindService-Aufruf zu einer Ausnahme, daher ist die Manifestprüfung der erste Schritt bei der Diagnose von Service-Problemen.

Häufig gestellte Fragen

In welchem Thread wird Service standardmäßig ausgeführt?

Service wird im Hauptthread (UI-Thread) der Anwendung ausgeführt. Jede blockierende Operation innerhalb von onStartCommand oder onHandleIntent muss in einen separaten Thread oder eine Coroutine ausgelagert werden, andernfalls löst das System nach 5 Sekunden einen ANR aus.

Wie unterscheidet sich IntentService von einem regulären Service?

IntentService ist eine Unterklasse von Service, die automatisch einen Worker-Thread erstellt und Befehle sequenziell verarbeitet. Nach Abschluss der letzten Aufgabe stoppt IntentService sich selbst. Ab Android 8 gilt IntentService als veraltet zugunsten von JobIntentService oder WorkManager.

Kann man einen Service starten, wenn die App im Hintergrund ist, unter Android 12?

Das Starten eines Started Service aus dem Hintergrund ist unter Android 12 verboten. Die Ausnahme ist ein Foreground Service mit deklariertem foregroundServiceType im Manifest und einer gültigen Benachrichtigung. Auch ein kurzer Start nach Erhalt einer hochprioritären FCM-Nachricht ist erlaubt.

Wie überträgt man Daten vom Service an die Activity?

Es gibt drei Methoden: BroadcastReceiver mit lokalem Broadcast, den Messenger-Mechanismus über Handler und LiveData/Flow in der MVVM-Architektur mit einem gemeinsamen ViewModel. Für Bound Service wird IBinder mit direkten Methodenaufrufen verwendet.

Was passiert beim Neustart der App, wenn ein Service lief?

Wenn ein Service mit dem Flag START_STICKY gestartet wurde, startet das System ihn neu, nachdem der Prozess aufgrund von Speichermangel beendet wurde. Das Flag START_NOT_STICKY bedeutet, dass das System den Dienst nicht neu startet. START_REDELIVER_INTENT ähnelt START_STICKY, liefert jedoch den letzten Intent.

Zusammenfassung

  • Background Service ist eine Android-Komponente für Hintergrundoperationen ohne UI, die im Hauptthread läuft.
  • Drei Typen — Started, Bound und Foreground — decken verschiedene Szenarien ab, von einmaligen Aufgaben bis hin zu dauerhafter Arbeit mit Benachrichtigungen.
  • Lebenszyklus umfasst onCreate, onStartCommand, onBind und onDestroy — Ressourcenfreigabe in onDestroy ist wichtig.
  • Foreground Service ist der einzige Typ, der unter Android 8+ zuverlässig funktioniert, ohne vom System beendet zu werden.
  • WorkManager und JobScheduler sind für verzögerte und garantierte Hintergrundaufgaben vorzuziehen.
  • Verwenden Sie Service nicht für Aufgaben, die eine präzise Zeitsteuerung erfordern — verwenden Sie stattdessen AlarmManager.
  • Registrieren Sie Service immer in der AndroidManifest.xml und geben Sie android:foregroundServiceType auf Android 12+ an.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch