Background Fetch, Remote Notifications und Background Transfer Service

Systemressourcen bei der App-Entwicklung für iOS schonen

Mark Zimmermann weist mehrere Jahre Erfahrung in den Bereichen Mobile Sicherheit, Mobile Lösungserstellung, Digitalisierung und Wearables auf. Er versteht es diese Themen aus unterschiedlichsten Blickwinkeln für unternehmensspezifische Herausforderungen darzustellen. Hierzu ist er auf nationale Vorträgen und als freier Autor für Fachpublikationen tätig.
Die größten Stromfresser bei der Nutzung von mobilen Endgeräten stellen das Übermitteln von Daten sowie die Verwendung des Multitasking dar. Entwickler sollten daher dafür Sorge tragen, Systemressourcen zu schonen.
Foto: Alex Mit/Shutterstock.com

Bei der Entwicklung von iOS 8 hat Apple großen Wert auf Erhöhung der Performance sowie der Betriebszeit der Endgeräte gelegt. Abgesehen von einigen wenigen Ausnahmen laufen die in der Multitasking-Übersicht ersichtlichen Anwendungen nicht wirklich im Hintergrund. Wenn der Home-Button des iOS-Gerätes gedrückt wird oder die Multitasking-Geste ausgeführt wird, fordert iOS die laufende Anwendung auf, sich zu schließen. Fast immer kommen die Apps dieser Aufforderung nach, beenden sich komplett und beanspruchen keine Ressourcen mehr. Über die Multitasking API besteht die Möglichkeit, weitere Aktivitäten voran zu treiben.

Multitasking wurde von Apple initial mit iOS 4 - also zeitgleich mit dem iPhone 3GS - zur Nutzung als API bereitgestellt. Diese API ermöglicht es dem Entwickler, Apps für rudimentäre Ereignisse zu registrieren, um diese vom System zu empfangen. Somit ist es etwa möglich, GPS-Anwendungen auch im Hintergrund zu betreiben. In diesem bis einschließlich iOS 6 zur Verfügung gestellten Multitasking standen dem Entwickler jedoch keine Möglichkeiten zur Verfügung, effizient mit den Ressourcen des Endgerätes umzugehen.

So hat das iOS System vor iOS 7 nach der Gerätesperre über einen festen Zeitraum hinweg (ca. bis zu 10 Minuten) noch Rechenzeit bereitgestellt, diese dann aber zu einem fix definierten Zeitpunkt abgeschaltet. Ziel dieser Übung war es, Apps die Möglichkeit zu bieten, etwa mit ihren Downloads fertig zu werden - dies wurde ihnen aber nicht garantiert und gegebenenfalls durch iOS 6 hart unterbrochen. Auch ein mehr als zehnminütiger Download von Daten im Hintergrund war nicht möglich, erschwerend kam hinzu, dass alle Downloads (auch unterschiedlicher Apps) gleichzeitig abliefen.

Zwischenzeitlich stellt iOS Entwicklern die folgenden Möglichkeiten für Hintergrunddienste zur Verfügung:

Die möglichen Hintergrunddienste

Audio und Airplay

Die App gibt Audiomaterial auch im Hintergrund wieder oder zeichnet Audiosignale weiter auf. Dies betrifft auch das Streamen von Audio oder Videomaterial per Airplay.

Location Updates

Aktualisierung der User Location - auch im Hintergrundbetrieb der App.

Voice over IP

Bereitstellung von Telefonie über VoIP - auch wenn sich die App im Hintergrund befindet.

Newsstand downloads

Download von Inhalten aus dem Apple-Newsstand.

External accessory communication

Kommunikation mit entsprechend zertifizierter Hardware um deren Status zu abzufragen oder Status zu setzen.

Uses Bluetooth LE accessoires

Kommunikation mit Bluetooth Zubehör.

Acts as a Bluetooth LE accessory

Kommunikation über Bluetooth.

Background fetch

Die App kann Daten laden, auch wenn sie sich im Hintergrund befindet.

Remote notifications

Events, die z.B. durch angeschlossene Hardware (Kopfhörer Fernbedienungen) ausgelöst werden.

Multitasking im Überblick

Seit iOS 7 gibt Apple den Entwicklern drei neue Arten des Multitaskings per API an die Hand, hierzu gehören: Background Fetch, Remote Notifications und die Background Transfer Services. Diese drei neuen APIs geben dem Entwickler die Möglichkeit, Anwendungen die Möglichkeiten des Gerätes (iPad, iPhone) auch mit Hinblick auf die Akkulaufzeit optimal zu nutzen - siehe Abbildung 1.

iOS: Multitasking im Vergleich
iOS: Multitasking im Vergleich
Foto: Mark Zimmermann

App Status

Die Multitasking-Dienste können zu unterschiedlichen Applikationsstatus verwendet werden. Dabei stehen die folgenden Stati zur Laufzeit einer Applikation innerhalb von iOS zur Verfügung:

Status von Apps unter iOS 8

Not running

Die App wurde nicht gestartet oder wurde durch das System beendet. Die Anwendung wird weder durch das System regelmäßig geweckt noch kann sie Code ausführen.

Inactive

Ist nur ein temporärer Status, der im Übergang zwischen den anderen Stati angenommen wird.

Active

Die Anwendung ist im Vordergrund aktiv, empfängt Benachrichtigungen und führt Code aus. Dies ist der normale Status einer App.

Background

Die Anwendung befindet sich im Hintergrund und führt noch Programmcode aus. In einer App kann zusätzliche Verarbeitungszeit angefordert werden, um länger in diesem Modus zu verharren, um Prozesse abschließen zu können.

Suspended

Eine App ist gestartet, befindet sich im Hintergrund - führt aber keinen Code aus. Pausierte Apps werden regelmäßig durch iOS 8 geweckt und erhalten so die Möglichkeit, innerhalb kleiner Zeitfenster Code auszuführen.