Sobes.tech
Middle

Wie stellt man sicher, dass die Anwendung im Hintergrund weiterläuft?

sobes.tech KI

Antwort von AI

Um die Funktionalität der Anwendung im Hintergrund zu gewährleisten, werden verschiedene iOS-Mechanismen verwendet, abhängig vom Aufgabentyp:

  • Hintergrundmodi: Dies sind vordefinierte Systemmodi, die bestimmte Operationen im Hintergrund ermöglichen. Die häufigsten:

    • audio: Wiedergabe oder Aufnahme von Audio.
    • location: Standortverfolgung.
    • voip: Verwendung von VoIP.
    • fetch: Regelmäßiges Laden neuer Inhalte.
    • processing: Ausführung ressourcenintensiver Aufgaben.
    • remote-notification: Verarbeitung von Push-Benachrichtigungen.

    Um die Hintergrundmodi zu aktivieren, müssen die entsprechenden Schlüssel in Info.plist hinzugefügt oder Capabilities in Xcode verwendet werden.

  • Hintergrundaufgabe: Ermöglicht eine begrenzte Zeit, um die aktuelle Aufgabe nach dem Übergang der Anwendung in den Hintergrund abzuschließen.

    var backgroundTask: UIBackgroundTaskIdentifier = .invalid
    
    func registerBackgroundTask() {
        backgroundTask = UIApplication.shared.beginBackgroundTask {
            // Ablauf verwalten
            self.endBackgroundTask()
        }
        // Hintergrundaufgabe ausführen
        // ...
    }
    
    func endBackgroundTask() {
        UIApplication.shared.endBackgroundTask(backgroundTask)
        backgroundTask = .invalid
    }
    
  • Hintergrundabruf (Fetch): Ermöglicht es dem System, die Anwendung periodisch im Hintergrund zu starten, um nach neuen Inhalten zu suchen und diese herunterzuladen.

    // Im AppDelegate, in didFinishLaunchingWithOptions
    UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
    
    // In didFinishLaunchingWithOptions oder in einer separaten Methode
    func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        // Asynchronen Datenabruf durchführen
        // Nach Abschluss den completionHandler mit dem entsprechenden Ergebnis aufrufen:
        // .newData, .noData, .failed
        completionHandler(.newData)
    }
    
  • Hintergrundverarbeitung: Für die Ausführung ressourcenintensiver Aufgaben, die viel Zeit in Anspruch nehmen können. Wird mit BGTaskScheduler verwendet.

    import BackgroundTasks
    
    let taskID = "com.yourapp.mytask"
    
    func registerBackgroundTasks() {
        BGTaskScheduler.shared.register(forTaskWithIdentifier: taskID, using: nil) { task in
            // Aufgabe ausführen
            self.handleBackgroundTask(task: task as! BGProcessingTask)
        }
    }
    
    func handleBackgroundTask(task: BGProcessingTask) {
        // Lange Aufgabe ausführen
        // Aufgabe als abgeschlossen markieren
        task.setTaskCompleted(success: true)
    }
    
    // Aufgabe planen
    func scheduleBackgroundProcessingTask() {
        let request = BGProcessingTaskRequest(identifier: taskID)
        // Anforderungen an die Ausführungsumgebung konfigurieren (z.B. Netzwerkverbindung, Batterieladung)
        request.requiresNetworkConnectivity = true
    
        do {
            try BGTaskScheduler.shared.submit(request)
        } catch {
            print("Konnte die Aufgabe nicht planen: \(error)")
        }
    }
    
  • Push-Benachrichtigungen: Silent pushes können verwendet werden, um die Anwendung im Hintergrund zu aktivieren und neuen Inhalt zu laden.

  • Work Manager (Android) Äquivalent für iOS (indirekt): BGTaskScheduler ist das Äquivalent zum Android Work Manager, das die Planung von Hintergrundaufgaben unter Berücksichtigung der Systemressourcen und -einschränkungen ermöglicht.

Die Wahl eines bestimmten Mechanismus hängt vom Aufgabentyp ab, der im Hintergrund ausgeführt werden soll. Die Verwendung eines ungeeigneten Mechanismus kann dazu führen, dass die Anwendung bei der Überprüfung im App Store abgelehnt wird und die Hintergrundprozesse vom System schnell beendet werden. Es ist auch wichtig, die Systemressourcen zu schonen: Batterie, Speicher und CPU.