Suche
Ralf Wondratschek auf der MTC 2017

Android-Jobs im Hintergrund: So bleibt die Performance stabil

Kypriani Sinaris

Als Smartphone-Nutzer kommt man meistens dann auf das Thema Hintergrundjobs, wenn man merkt, dass sich der Akku schneller entlädt als sonst. Als Entwickler steht man vor der Aufgabe, Jobs im Hintergrund so zu programmieren, dass die Nutzer genau diese Beobachtung gar nicht erst machen. Ralf Wondratschek (Evernote), Speaker bei der MobileTechCon 2017, zeigt, worauf es bei Hintergrund-Tasks ankommt.

Du widmest dich in deiner Session auf der MTC 2017 einem ganz speziellen Thema: Jobs oder Tasks, die im Hintergrund laufen. Als praktische Einführung: Kannst du ein klassisches Beispiel dafür nennen?

Ralf Wondratschek: Das typischste Beispiel ist sicherlich der bekannte Sync-Job, der Daten stündlich oder vielleicht auch nur nachts hochlädt, wenn das Gerät eine gute Internetverbindung hat. Es können aber auch andere Aufgaben sein, z. B. ein Alarm einer Wecker-App oder eine Erinnerung an den Nutzer nach zwei Tagen Inaktivität.

Die Jobs beziehen sich weniger auf asynchrone Abläufe, während sich die App im Vordergrund befindet, wofür es andere und geeignetere Lösungen gibt. Sie beziehen sich vielmehr auf Dinge in der Zukunft, während sich die App vielleicht im Hintergrund befindet.

Wie sehr beeinflussen Jobs im Hintergrund die Performance?

Ralf Wondratschek: Im besten Fall bekommt der Nutzer diese gar nicht mit, wenn es sich um Aufgaben im Hintergrund handelt. Solche Dinge sollten sehr transparent ablaufen. Um zu dem Sync-Job zurückzukommen, dieser sollte im besten Fall nur laufen, wenn der Nutzer gerade eine aktive Internetverbindung hat, die ihm keine Kosten verursacht, z. B. durch Roaming-Gebühren oder den Verbrauch des Datenvolumens.

Der Zeitpunkt, zu dem Jobs laufen, muss dynamisch sein und sich an die äußeren Bedingungen anpassen. Eine rechenintensive Aufgabe sollte nur laufen, wenn das Gerät gerade geladen wird und nicht die letzten 5% vom Akku verbrauchen.

Die Verbreitung so vieler unterschiedlicher Android-Versionen ist für diese Jobs ein Problem – warum?

Ralf Wondratschek: Die Schnittstellen, die Android für solche Aufgaben anbietet, haben sich über verschiedene Versionen semantisch geändert. Ein Funktionsaufruf funktioniert auf einem Gerät wie erwartet und bei einer neueren Android-Version passiert dann etwas unerwartetes. Das macht es für den Entwickler sehr fehleranfällig und aufwendig, zu gewährleisten, dass ein Job auf allen Geräten gleich funktioniert.

Andere APIs dagegen sind erst bei neueren Android-Versionen verfügbar und wiederum andere nur, wenn die Google-Play-Services installiert sind, was im asiatischen Raum nicht immer der Fall sein muss.

Du prophezeist in deinem Sessionabstract, dass man wegen der unterschiedlichen API Level, die man ansprechen muss, in seinem Code viele verschiedene Pfade vorfinden könnte, die aber alle das Gleiche erledigen. Das klingt erstmal nicht besonders attraktiv. Welche Lösung schlägst du vor?

Ralf Wondratschek: Genau, Android bietet insgesamt drei verschiedene APIs wovon zwei nicht immer vorhanden sind, aber die besten Möglichkeiten bieten. Die dritte Schnittstelle funktioniert nicht auf allen Geräten gleich. Es klingt daher nur logisch, dass man an einer Stelle in seinem Code viele if-then-else-Statements haben wird.

Ich bin etwas enttäuscht, dass Google keine einheitlich Lösung anbietet, gerade da sie den Batterieverbrauch mit Doze und App Standby so in den Fokus rücken. Daher möchte ich unseren Lösungsweg vorstellen, damit die Besucher meiner Session von den Erfahrungen profitieren und nicht den gleichen Aufwand haben.

wondratschek_ralfRalf Wondratschek arbeitet als Senior Software Engineer, Android bei Evernote, deren App für Android täglich von mehreren Millionen Menschen genutzt wird.

Verwandte Themen:

Geschrieben von
Kypriani Sinaris
Kypriani Sinaris
Kypriani Sinaris studierte Kognitive Linguistik an der Goethe Universität Frankfurt am Main. Seit 2015 ist sie Redakteurin bei JAXenter und dem Java Magazin.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.