Facebook App saugt den iPhone Akku leer

ENGLISH VERSION OF THIS ARTICLE: Facebook app is draining your iPhone’s battery

Ich hatte in letzter Zeit immer eine recht kurze Akkulaufzeit mit meinem iPhone 4S. Nach einem Arbeitstag hatte ich meist weniger als 10% übrig. Und das nach vielleicht 12 Stunden in denen ich es nicht wirklich häufig benutzt habe.

Also hab ich mich mal auf die Suche nach der Ursache gemacht.
Als iOS-Entwickler war mir Instruments aus Apples Developer Tools bekannt. Damit kann man in erster Linie seine selbst-entwickelten Apps benchmarken und langsame Stellen oder auch Speicherlecks finden.

Davon abgesehen kann man sich mit Instruments aber auch einfach die laufenden Prozesse des iPhones anzeigen lassen. Quasi so wie auf dem Mac mit dem Aktivitätsmonitor.

Da gibt es dann eine hübsche Übersichtsseite. Dort fiel mir folgendes ins Auge:
AcitivityMonitorCPUTime

Das ist eine Übersicht der Prozesse, die am meisten CPU-Zeit gebraucht haben. Im Klartext: die Apps die am längsten gelaufen sind. Die oberen vier sind Systemprozesse (SpringBoard zeigt z.B. die Homescreens an), ganz unten ist die Facebook App. Die braucht also mehr als doppelt so lange wie DTMobileIS (das ist der Prozess auf dem iPhone, der Instruments mit den Daten versorgt). Das kam mir doch etwas viel vor. Ich gucke zwar häufig bei Facebook rein, aber soo häufig dann auch wieder nicht.

Also hab ich das mal etwas länger laufen lassen und hab mal die Flags in Instruments beobachtet.
Die Flags zeigen an, wann eine App gestartet, wann sie beendet wurde und was mich besonders interessierte: wann sie in den Hintergrund geschaltet und wann sie schlafen gelegt wurde.

Um das zu verstehen muss ich ein wenig ausholen:
Wenn man eine App startet, dann läuft sie im Vordergrund. Klar. Drückt man nun den Homebutton, wird die App aber nicht beendet (terminiert), sondern nur schlafen gelegt. Schläft eine App ist sie eingefroren und tut nichts (verbraucht keine CPU Zeit), sie belegt allerdings Speicher. Das hat den Vorteil, dass sie sofort wieder da ist, wenn man sie wieder startet. Sie muss ja nicht gestartet werden, sondern wird nur schnell aufgetaut.
Apps können im eingefrorenem Zustand auch komplett beendet werden (vom System wenn der Speicher knapp wird oder vom Benutzer über die Multitasking-Leiste, was aber eigentlich nicht nötig ist).

Seit iOS 4 gibt es nun aber Multitasking. Damit können Apps beim Beenden noch bis zu 10 min im Hintergrund aktiv bleiben. Das ist z.B. praktisch für Apps wie Instacast, die dann im Hintergrund noch die Podcasts zu Ende laden können (früher musste die App dafür dann halt geöffnet bleiben) oder auch für meine App Home Remind, die dann im Hintergrund noch die Erinnerung abschicken kann.. Das ist auch nicht weiter schlimm und das System beendet diese Apps (friert sie ein) spätestens nach 10 min oder eben wenn die App meldet, dass sie fertig ist.

Das nutzen manche Apps natürlich aus. WhatsApp ist z.B. so ein Kandidat. Wenn es vermeintlich beendet ist, läuft es genau diese 10 min im Hintergrund weiter und empfängt dann direkt Nachrichten anstatt sich diese über Apples Push-Benachrichtigungs-Server schicken zu lassen. Nach diesen 10 min ist zwar Schluss, aber startet man innerhalb dieser 10 min WhatsApp erneut, beginnen diese 10 min von neuem.
Es kann also sein, dass WhatsApp durchgehend läuft, wenn man immer innerhalb dieser 10 min eine neue Nachricht bekommt, dann WhatsApp öffnet und wieder schließt. Aber gut, so beliebt werden wohl die wenigsten von uns sein, dass das wirklich ein Problem wird.

Zusätzlich zu diesem 10 min Multitasking gibt es noch vier weitere Multitasking-Methoden. Allen gemein ist, dass diese zeitlich unbegrenzt sind. Und viel wichtiger: diese werden von den Apps selbst festgelegt, doch dazu gleich mehr.

Diese vier Methoden sind:

  • Audio abspielen: so kann z.B. Spotify im Hintergrund Musik spielen
  • Ortungsdienste nutzen: z.B. für Navigationsapps
  • Newsstand Downloads: geht nur bei Newsstand Apps, also neue Ausgaben im Hintergrund laden
  • VoIP-Nutzung: Apps wie Skype, über die man telefonieren kann dürfen auch die ganze Zeit laufen und auf Anrufe warten

So, kommen wir nun zu unserem Fall zurück: Facebook.
Wie gesagt, die App legt fest, was sie davon nutzt. Facebook nutzt davon gleich zwei: Audio und VoIP!
VoIP seit man auch über Facebook telefonieren kann und wofür das Audio weiß ich selbst nicht. (Allerdings wird das schon irgendwie genutzt werden, denn Apple überprüft im Review-Prozess, ob diese Multitasking-Methoden ordnungsgemäß verwendet werden.)

*Update* Aus einem Kommentar bei iPhone-Ticker: „Most VoIP apps also need to be configured as background audio apps to deliver audio while in the background. Therefore, you should include both the audio and voip values to the UIBackgroundModes key. If you do not do this, your app cannot play audio while it is in the background.“
Quelle *Update-Ende*

Das heißt, die Facebook-App kann prinzipiell die ganze Zeit im Hintergrund aktiv sein.
Laut Instruments ist sie das nicht, zumindest nicht die ganze Zeit.
Anhand der Flags kann man sehen, dass sie alle paar Minuten kurz aufwacht, ca. 10 Sekunden irgendwas macht und dann wieder schläft.
FacebookFlags

Ich hab das mal 2 Stunden laufen lassen und wie man in der Spalte ganz rechts an den Zeiten erkennen kann, wacht die Facebook-App in schöner Regelmäßigkeit auf macht ziemlich genau 10 Sekunden etwas und schläft dann wieder. Und das den ganzen Tag lang.

Das erklärt, warum sie Spitzenreiter beim CPU-Zeit-Verbrauch ist.
Theoretisch könnte sie euch in dieser Zeit auch orten und das an Facebook schicken, allerdings habe ich dafür keine Indizien gefunden, also macht Facebook das wohl nicht.

Jetzt habe ich nach einer Einstellung gesucht, mit der man Facebook dieses Hintergrundleben abgewöhnen kann. Da dachte ich: man kann doch den Chat innerhalb der App deaktivieren. Vielleicht läuft die App ja nur dauernd, weil sie auf Anrufe wartet.

Hier das Ergebnis mit deaktiviertem Chat:
Chat aus

Wie man sieht macht das überhaupt keinen Unterschied.

Abgesehen davon hab ich keine weitere Einstellung gefunden, die daran irgendwas ändert.

Es gibt daher wohl nur zwei Lösungen zu diesem Problem:
1. Facebook-App löschen
oder
2. Die Facebook-App nach jeder Benutzung über die Multitasking-Leiste beenden (Home-Button doppelt schnell hintereinander drücken, dann erscheint unten eine Leiste, dort dann länger auf ein Symbol drücken bis sie anfangen zu wackeln und dann die Facebook-App mit dem kleinen Minus beenden)
Jetzt ist sie wirklich beendet und wird auch nicht von allein gestartet oder sowas. Vergisst man das Beenden natürlich einmal, läuft sie wieder wie gehabt im Hintergrund.

Ich halte mich momentan an Methode 2. Seitdem taucht die Facebook-App in der Liste der größten CPU-Zeit-Verbraucher nicht mehr auf und mein Akku hält wieder länger.

Besser wäre es natürlich, wenn Facebook das in ihrer App ändert.
Ich sehe überhaupt keine Veranlassung, warum die alle Minuten laufen müsste.

Probiert das doch mal bei euch aus und schreibt in die Kommentare ob eure Akkulaufzeit davon irgendwie profitiert.

PS: Habe das auf zwei verschiedenen iPhones getestet, tritt also nicht nur auf meinem iPhone auf.

Update: Hab das jetzt nochmal mit dem Facebook Messenger getestet. Der verhält sich genauso. Läuft auch alle paar Minuten:
Facebook Messenger

Außerdem hab ich die Facebook App auch auf dem iPad ausprobiert (den Messenger gibt’s ja nicht für’s iPad). Dort läuft er wie zu erwarten genauso oft im Hintergrund wie auf dem iPhone. Ist auch kein Wunder, ist ja schließlich die gleiche App für iPhone und iPad.
Facebook iPad

PS zum Update: Habe das jetzt mit der in diesem Kommentar beschriebenen Methode gemacht (da loggt das iPhone selbst die Aktivität und muss nicht live am Mac angeschlossen sein). Ändert aber nichts am Ergebnis.

Update 2: Auch das Facebook App Update auf Version 6.2 vom 18.06. bringt keine Abhilfe.

Update 3: Habe mir noch einige andere Apps angeguckt.

Update 4 vom 26.11.2013: Facebook hat immer noch nichts geändert. Auch Version 6.7.2 vom 13.11.2013 läuft immer noch alle 15 min für 10 Sekunden im Hintergrund. Ebenso der Facebook Messenger in der Version 3.0.1 vom 18.11.2013.

Update 5 vom 21.02.2014: Im Westen nichts neues. Auch Version 7.0 vom 20.02.2014 ändert nichts am bekannten Verhalten. 🙁

Update 6 vom 18.03.2014: Version 8.0 macht immer noch dasselbe. ABER man kann unter iOS 7 in den Systemeinstellungen unter dem Punkt Hintergrundaktualisierung dieselbe für Facebook ausschalten und dann läuft die App nicht mehr im Hintergrund. Das ist doch schon mal was.

Update 7 vom 28.05.2014: Wie sich herausgestellt hat, bringt der Tipp mit der Hintergrundaktualisierung nichts. 🙁

Comments are closed.