Background: Grundlagen, App-Arbeit im Hintergrund auf iOS und Android

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

Background ist ein Lebenszyklus-Zustand einer App, in dem sie weiterläuft, aber nicht auf dem Bildschirm angezeigt wird. Wir erklären die Grundlagen der Hintergrundarbeit auf iOS und Android: Einschränkungen, Timeouts, Hintergrundaufgaben über beginBackgroundTask, WorkManager und Service sowie Best Practices für die korrekte Behandlung von Background.

Wichtige Punkte

  • Background — die App ist für den Benutzer nicht sichtbar, kann aber für eine begrenzte Zeit Code ausführen
  • iOS-Hintergrundaufgabe — beginBackgroundTask(expirationHandler:) gibt bis zu 30 Sekunden zum Beenden der Arbeit
  • Android Service — Foreground Service mit Benachrichtigung für lange Hintergrundoperationen
  • WorkManager — empfohlene API für Hintergrundaufgaben auf Android mit Ausführungsgarantie
  • Einschränkungen — beide Plattformen verschärfen die Regeln für Hintergrundarbeit, um Akku zu sparen

Background — Grundlagen des Hintergrundzustands

Background ist ein Zustand der App, in dem sie weiterhin im Betriebssystem existiert, Code ausführt und Ressourcen verbraucht, aber nicht auf dem Gerätebildschirm angezeigt wird. Der Benutzer befindet sich auf dem Startbildschirm, in einer anderen App oder der Gerätebildschirm ist gesperrt. Auf iOS folgt Background auf Inactive — die Übergangskette: Active → Inactive → Background. Auf Android signalisiert onStop den Übergang einer Activity in Background.

Beide Plattformen erlegen strenge Beschränkungen für Hintergrundarbeit auf. iOS gewährt ein begrenztes Zeitfenster (normalerweise 30 Sekunden) zur Codeausführung nach dem Eintritt in Background, danach wechselt die App in Suspended. Android ist flexibler: Ein Foreground Service mit sichtbarer Benachrichtigung kann unbegrenzt laufen, aber ein normaler Background Service ist auf wenige Minuten begrenzt. Die Hauptaufgabe des Entwicklers ist es, den Zustand korrekt zu speichern und die Fortsetzung der Arbeit über System-APIs für Hintergrundaufgaben zu planen.

Das System kann eine Hintergrund-App jederzeit bei Speichermangel beenden. Bei Beendigung gehen alle nicht gespeicherten Daten verloren. Daher ist es entscheidend, den Zustand in applicationDidEnterBackground (iOS) oder onStop (Android) zu speichern. Nach der Beendigung startet der nächste Start von Not Running mit einem Kaltstart und stellt den gespeicherten Zustand wieder her.

Background vs. Suspended

Es ist wichtig, Background von Suspended zu unterscheiden. Background — die App führt aktiv Code aus. Suspended — die App ist im Speicher, führt aber keinen Code aus — sie ist eingefroren. Auf iOS wechselt die App nach Abschluss der Hintergrundaufgaben von Background zu Suspended. Android hat kein Suspended — der Prozess existiert entweder (einschließlich Background) oder ist beendet (Not Running). Allerdings kann Android die Thread-Ausführung über LMK (Low Memory Killer) pausieren.

EigenschaftiOS BackgroundAndroid Background
CodeausführungJa, bis zu 30 SekundenJa, abhängig von API
UI sichtbarNeinNein
Standard-Timeout~30 Sek (beginBackgroundTask)Mehrere Minuten (Service)
Unbegrenzte ArbeitNur spezielle Kategorien (Audio, VoIP, Navigation)Foreground Service mit Benachrichtigung
AusführungsgarantieNein — System kann jederzeit beendenWorkManager garantiert Ausführung
Berechtigung erforderlichJa — Capabilities in Info.plistJa — FOREGROUND_SERVICE-Berechtigung
Nächster ZustandSuspended → Not RunningNot Running (oder Neustart)

Background auf iOS: Swift, beginBackgroundTask und BGTaskScheduler

Auf iOS wird Background über die Delegatenmethode applicationDidEnterBackground behandelt. In dieser Methode sollte der Entwickler den Benutzerzustand speichern, Ressourcen freigeben und Hintergrundaufgaben abschließen. Um Code nach dem Eintritt in Background auszuführen, wird beginBackgroundTask(expirationHandler:) verwendet — eine API, die zusätzliche Zeit vom System anfordert (normalerweise 30 Sekunden). Wenn die Aufgabe nicht innerhalb dieser Zeit abgeschlossen wird, wird der expirationHandler aufgerufen und die App wird zwangsweise in Suspended versetzt.

Mit iOS 13 führte Apple BGTaskScheduler ein — eine moderne API zur Planung von Hintergrundaufgaben. Im Gegensatz zu beginBackgroundTask, das nur Zeit zum Beenden nach dem Hintergrundwechsel gibt, erlaubt BGTaskScheduler die Planung von Aufgaben in der Zukunft — zum Beispiel stündliche Inhaltsaktualisierungen oder das Hochladen von Analysen nachts. BGTaskScheduler ist der empfohlene Ansatz für neue Projekte, da er batterieeffizienter ist.

swift
import UIKit
import BackgroundTasks

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    var backgroundTaskID: UIBackgroundTaskIdentifier = .invalid

    // App in den Hintergrund gewechselt — Hintergrundaufgabe starten
    func applicationDidEnterBackground(_ application: UIApplication) {
        saveAppState()
        startBackgroundTask()
    }

    private func startBackgroundTask() {
        backgroundTaskID = UIApplication.shared.beginBackgroundTask { [weak self] in
            // Zeit abgelaufen — erzwinge Beendigung
            self?.endBackgroundTask()
        }

        // Simuliere Hintergrundarbeit (Daten auf Server speichern)
        DispatchQueue.global().async { [weak self] in
            uploadAnalyticsData()
            self?.endBackgroundTask()
        }
    }

    private func endBackgroundTask() {
        guard backgroundTaskID != .invalid else { return }
        UIApplication.shared.endBackgroundTask(backgroundTaskID)
        backgroundTaskID = .invalid
    }

    // BGTaskScheduler-Registrierung
    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        BGTaskScheduler.shared.register(
            forTaskWithIdentifier: "com.example.refresh",
            using: nil
        ) { task in
            handleAppRefresh(task: task as! BGAppRefreshTask)
        }
        return true
    }

    func scheduleAppRefresh() {
        let request = BGAppRefreshTaskRequest(identifier: "com.example.refresh")
        request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)
        try? BGTaskScheduler.shared.submit(request)
    }

    func handleAppRefresh(task: BGAppRefreshTask) {
        scheduleAppRefresh()
        task.expirationHandler = { task.setTaskCompleted(success: false) }
        fetchLatestData { result in
            task.setTaskCompleted(success: result)
        }
    }
}

Der Code zeigt die vollständige Background-Behandlung auf iOS. applicationDidEnterBackground startet eine Hintergrundaufgabe über beginBackgroundTask mit einem Timeout und expirationHandler. Gleichzeitig wird BGTaskScheduler für regelmäßige Inhaltsaktualisierungen registriert. beginBackgroundTask wird für sofortige Beendigungsaufgaben verwendet, BGTaskScheduler für langfristige Planung. Beide APIs erfordern eine ordnungsgemäße Verwaltung der Aufgabenkennungen.

Background auf Android: Kotlin, Service, WorkManager

Auf Android wird Background über mehrere APIs verwaltet. Der traditionelle Service erlaubt die Codeausführung im Hintergrund, aber seit Android 8+ (API 26) ist der Background Service eingeschränkt: Das System beendet ihn wenige Minuten nachdem die App in den Hintergrund geht. Ein Foreground Service mit dauerhafter Benachrichtigung kann unbegrenzt laufen. WorkManager ist die empfohlene Lösung für Hintergrundaufgaben mit Ausführungsgarantie auch nach Geräteneustart.

Android unterstützt im Gegensatz zu iOS langlebige Hintergrundprozesse. Foreground Service wird für Aufgaben verwendet, die der Benutzer sehen sollte — Musikwiedergabe, Navigation, Trainingaufzeichnung. JobScheduler und WorkManager werden für Aufgaben verwendet, die aufgeschoben werden können: Datensynchronisation, Log-Hochladen, Cache-Aktualisierung. Der Hauptunterschied: Android erlaubt die Planung von Aufgaben mit Bedingungen — Wi-Fi, Laden, Geräte-Leerlauf — was Akku und Datenverkehr spart.

kotlin
import android.app.Service
import android.content.Intent
import android.os.IBinder
import androidx.work.*

// 1. Foreground Service für langlaufende Hintergrundarbeit
class SyncService : Service() {

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        val notification = createNotification()
        startForeground(NOTIFICATION_ID, notification)
        performBackgroundWork()
        return START_STICKY
    }

    private fun performBackgroundWork() {
        Thread {
            // Datensynchronisation mit Server
            syncDataToServer()
            stopForeground(STOP_FOREGROUND_REMOVE)
            stopSelf()
        }.start()
    }

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

// 2. WorkManager für verzögerte Hintergrundaufgaben
class DataSyncWorker(
    private val context: Context,
    private val params: WorkerParameters
) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        return try {
            // Analysen auf Server hochladen
            uploadAnalytics()
            Result.success()
        } catch (e: Exception) {
            if (runAttemptCount < 3) Result.retry() else Result.failure()
        }
    }
}

// WorkManager Aufgabenplanung
fun scheduleBackgroundSync(context: Context) {
    val constraints = Constraints.Builder()
        .setRequiredNetworkType(NetworkType.CONNECTED)
        .setRequiresBatteryNotLow(true)
        .build()

    val request = OneTimeWorkRequestBuilder<DataSyncWorker>()
        .setConstraints(constraints)
        .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 30, TimeUnit.SECONDS)
        .build()

    WorkManager.getInstance(context).enqueue(request)
}

Der Code zeigt zwei Ansätze für Hintergrundarbeit auf Android. SyncService — ein Foreground Service mit Benachrichtigung für sofortige und langwierige Hintergrundarbeit. DataSyncWorker — WorkManager für verzögerte Aufgaben mit Bedingungen (Wi-Fi, Laden). WorkManager garantiert Ausführung auch nach Geräteneustart und unterstützt exponentielles Backoff für Wiederholungen. Foreground Service erfordert eine dauerhafte Benachrichtigung in der Statusleiste.

Einschränkungen der Hintergrundarbeit auf iOS und Android

Beide mobilen Plattformen verschärfen ständig die Regeln für Hintergrundarbeit. Auf iOS reduziert jede neue OS-Generation die Hintergrundausführungszeit und fügt neue Beschränkungen hinzu. Auf Android führt Google immer strengere Energiesparmodi (Doze, App Standby) ein. Entwickler sollten über aktuelle Einschränkungen auf dem Laufenden bleiben, damit die App nicht vorzeitig vom System beendet wird.

Auf iOS deaktiviert das System ab iOS 13 Hintergrundaufgaben für Apps, die die Hintergrundzeit missbrauchen. Jede App erhält bestimmte Grenzen basierend auf dem Benutzerverhalten. BGTaskScheduler plant die Ausführung zu optimalen Zeiten — zum Beispiel wenn das Gerät mit Wi-Fi verbunden ist und lädt. Apps, die BGTaskScheduler korrekt verwenden, erhalten mehr Hintergrundzeit.

Auf Android ist ab Android 9 (API 28) die Hintergrundarbeit durch den Doze-Modus eingeschränkt, der bei Geräte-Leerlauf aktiviert wird. Apps im Doze-Modus können keine Hintergrundaufgaben ausführen, das Netzwerk wird getrennt, JobScheduler und WorkManager verschieben Aufgaben bis zum Verlassen des Doze-Modus. Foreground Service ist der einzige Weg, Doze zu umgehen, aber Missbrauch führt zur Blockierung der App durch den Benutzer und zum Entzug der Berechtigungen.

EinschränkungiOSAndroid
Hintergrundaufgaben-Timeout~30 Sekunden (beginBackgroundTask)Mehrere Minuten (JobScheduler)
Unbegrenzter HintergrundAudio, VoIP, Navigation, BluetoothForeground Service + Benachrichtigung
EnergiesparenLow Power Mode — deaktiviert HintergrundaufgabenDoze, App Standby, Akku-Optimierung
PlanungBGTaskScheduler (iOS 13+)WorkManager (Android Jetpack)
Nach NeustartNur Push-BenachrichtigungWorkManager behält Aufgaben bei
Maximale Ausführungszeit~30 Minuten (Audio)Unbegrenzt (Foreground Service)

Best Practices für Hintergrundarbeit

Erste Regel — minimieren Sie den Ressourcenverbrauch im Hintergrund. Die meisten Hintergrundaufgaben können auf Zeiten verschoben werden, in denen das Gerät lädt und mit Wi-Fi verbunden ist. Verwenden Sie BGTaskScheduler (iOS) und WorkManager (Android) zur Planung von Aufgaben mit Bedingungen. Führen Sie keine rechenintensiven Operationen im Hintergrund aus — dies entlädt den Akku und führt zur CPU-Drosselung.

Zweite Regel — geben Sie immer einen expirationHandler für beginBackgroundTask an. Wenn die App die Aufgabe nicht innerhalb der zugewiesenen Zeit abschließt, wird das System sie zwangsweise in Suspended versetzen oder beenden. Der expirationHandler ist die letzte Chance, Daten zu speichern und die Arbeit ordnungsgemäß zu beenden. Verwenden Sie auf Android setForegroundAsync in WorkManager, um eine normale Aufgabe in den Vordergrund zu konvertieren, wenn mehr Zeit benötigt wird.

Dritte Regel — überprüfen Sie die Hintergrundarbeitseinschränkungen vor dem Start. Verwenden Sie auf iOS UIApplication.shared.backgroundTimeRemaining, um die verbleibende Zeit zu prüfen. Überprüfen Sie auf Android ActivityManager.isBackgroundRestricted() — wenn true, kann die App keine Hintergrundaufgaben ausführen, und Sie sollten dem Benutzer vorschlagen, die Einschränkungen in den Einstellungen zu entfernen. Dies ist besonders wichtig für Apps mit kritischen Hintergrundfunktionen — Alarme, Kalender, Synchronisation.

Vierte Regel — testen Sie Hintergrundaufgaben auf einem echten Gerät. Simulatoren und Emulatoren reproduzieren nicht die realen Einschränkungen der Hintergrundarbeit. Verwenden Sie auf iOS Debug → Simulate Background Fetch in Xcode. Verwenden Sie auf Android adb shell am broadcast -a android.intent.action.ACTION_BOOT_COMPLETED zum Testen von WorkManager nach einem Neustart. Reale Tests auf einem Gerät mit schwachem Akku decken die meisten Probleme der Hintergrundarbeit auf.

swift
import UIKit

final class BackgroundTaskManager {
    static let shared = BackgroundTaskManager()
    private var tasks: [String: UIBackgroundTaskIdentifier] = [:]

    func startTask(name: String, expiration: @escaping () -> Void) {
        let remaining = UIApplication.shared.backgroundTimeRemaining
        print("Verbleibende Hintergrundzeit: \(remaining) Sek")

        let task = UIApplication.shared.beginBackgroundTask { [weak self] in
            print("Zeit für Aufgabe abgelaufen: \(name)")
            expiration()
            self?.endTask(name: name)
        }

        tasks[name] = task
    }

    func endTask(name: String) {
        guard let task = tasks.removeValue(forKey: name),
              task != .invalid
        else { return }
        UIApplication.shared.endBackgroundTask(task)
    }
}

Der Code zeigt einen Hintergrundaufgaben-Manager, der die verbleibende Zeit verfolgt und Kennungen verwaltet. backgroundTimeRemaining gibt die Anzahl der Sekunden vor der erzwungenen Beendigung zurück — wenn der Wert unendlich ist, läuft die App ohne Einschränkungen (Audio, Navigation). Der Manager ermöglicht das Starten mehrerer Hintergrundaufgaben mit verschiedenen Namen und das ordnungsgemäße Beenden jeder einzelnen. Dieser Ansatz verhindert Hintergrundaufgaben-Leaks und stellt sicher, dass das System die App nicht aufgrund ungeschlossener Aufgaben beendet.

Häufig gestellte Fragen

Kann eine iOS-App für immer im Hintergrund laufen?

Ja, für eine begrenzte Anzahl von Kategorien: Audio (AVAudioSession Kategorie .playback), VoIP (PushKit), Navigation (CLLocationManager mit allowsBackgroundLocationUpdates), Bluetooth (central background mode), Hintergrundaktualisierung (BGTaskScheduler). Für alle anderen — maximal 30 Sekunden. In iOS 16+ hat Apple die Anforderungen selbst für erlaubte Kategorien verschärft.

Wie unterscheidet sich beginBackgroundTask von BGTaskScheduler?

beginBackgroundTask ist eine synchrone API zur Verlängerung der App-Lebensdauer um ~30 Sekunden nach dem Wechsel in den Hintergrund. Sie wird in applicationDidEnterBackground aufgerufen. BGTaskScheduler ist eine asynchrone API zur Planung von Aufgaben in der Zukunft über Systemtrigger (Zeit, Ort, Inhaltsaktualisierung). BGTaskScheduler ist der moderne Ansatz, empfohlen von Apple für iOS 13+.

Warum beendet Android meinen Background Service?

Ab Android 8 (API 26) wird ein Background Service wenige Minuten nachdem die App in den Hintergrund geht, beendet. Lösung: Verwenden Sie einen Foreground Service mit Benachrichtigung für lange Operationen oder WorkManager für verzögerte Aufgaben. Überprüfen Sie die Akku-Optimierung für Ihre App in den Einstellungen — wenn sie optimiert ist, kann das System Hintergrundaufgaben verschieben oder abbrechen.

Wie teste ich Background auf dem iOS-Simulator?

Drücken Sie Cmd+Shift+H, um zum Startbildschirm zu gelangen. Verwenden Sie in Xcode Debug → Simulate Background Fetch. Um beginBackgroundTask zu überprüfen, öffnen Sie die Konsole (Shift+Cmd+C) und rufen Sie e UIApplication.shared.backgroundTimeRemaining auf. In Xcode 15+ ist ein Background Execution-Szenario im Diagnostics-Tab des Simulators verfügbar.

Was ist Process Death auf Android?

Process Death ist die Beendigung eines Android-Prozesses durch das System bei Ressourcenknappheit oder im Hintergrund-Leerlauf. Im Gegensatz zu iOS hat Android kein Suspended — der Prozess ist entweder lebendig (kann im Hintergrund sein) oder tot (Not Running). Process Death ist normales OS-Verhalten, und die App muss den Zustand danach ordnungsgemäß über SavedStateHandle, onSaveInstanceState oder DataStore wiederherstellen.

Zusammenfassung

  • Background — die App ist nicht sichtbar, führt aber Code aus, im Gegensatz zu Suspended (eingefroren)
  • iOS — beginBackgroundTask (bis zu 30 Sek) und BGTaskScheduler zur Planung zukünftiger Aufgaben
  • Android — Foreground Service für lange Operationen, WorkManager für verzögerte Aufgaben mit Garantie
  • Einschränkungen — beide Plattformen verschärfen Regeln: Doze, Low Power Mode, App Standby
  • Speichern — applicationDidEnterBackground und onStop sind die letzte Chance vor Suspended/Not Running
  • Planung — BGTaskScheduler und WorkManager arbeiten mit Bedingungen (Wi-Fi, Laden, Zeit)
  • Foreground Service — der einzige Weg für unbegrenzte Hintergrundarbeit auf beiden Plattformen

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