Ein besonders beliebtes Dauerthema in der Android-Community scheint die Frage nach dem Sinn und Zweck von Task-Killer Apps zu sein. Damit ist die Möglichkeit gemeint, im Hintergrund laufende Programme, Tasks (Englisch: Aufgaben) und Prozesse zu beenden. Auch ich bin da am Anfang ganz schön verwirrt gewesen. Denn anders als bei Programmen, die auf dem Computer (unter Windows oder Linux) laufen, kann man man viele Android Apps gar nicht so einfach wieder beenden. Es gibt schlicht in vielen dieser Programm keine exit Funktion. Am ehesten kann man noch mit der Zurück-Taste den Ablauf stoppen. Wenn ich zuvor aber durch mehrere Menus gegangen bin, kann das schon ein wenig Daumenarbeit bedeuten. Einfacher geht es, indem ich die mittlere Home-Taste drücke. Dann bin ich wieder auf dem Home-Screen und kann irgendetwas anderes machen. Das Programm läuft aber einstweilen weiter. Klicke ich erneut auf die App bin ich wieder an der Stelle, wo ich sie verlassen habe. Ich kann auch jederzeit direkt wieder dorthin wechseln, indem ich die Home-Taste etwas länger drücke. Die in letzter Zeit benutzten Apps werden mir dann angezeigt und ich kann direkt wieder zu der einen oder anderen zurückwechseln. Im Grunde genommen kann es mir eigentlich egal sein, ob sie in der Zwischenzeit im Speicher war oder beim erneuten Drücken wieder zur selben Ablaufstelle hin gestartet wird. Die App nimmt es jedenfalls nicht übel, sie ist ja auch kein Mensch.
Aber läuft der Speicher nicht irgendwann voll, wenn ich eine App nach der anderen starte und sie dann alle warten lasse, bis ich mich wieder mit ihnen beschäftige? Der Theorie nach: Nein. Wie ich u.a. aus einem sehr interessanten Hintergrundartikel gelernt habe, besitzt Android ein Speicherverwaltungssystem, dass automatisch erkennt, wann der Speicher knapp wird. Dann entfernt die Speicherverwaltung die nach eigener Einschätzung unwichtigste App aus dem Speicher. Dabei werden jedoch noch zuvor Benutzerdaten gespeichert, so dass an sich nichts verloren gehen sollte.
Sofern das Programm also sauber programmiert ist, wird der User keinerlei Unterschied zwischen einer beendeten (und neu gestarteten) und einer laufenden (und aus dem Hintergrund geholten) Anwendung bemerken.
http://www.androidig.de/index.php/2009/07/23/hintergrund-arbeitsspeicher-verwaltung-unter-android/
So weit die Theorie. In der Praxis ist es mir schon passiert, dass die eine oder andere App schlicht nicht mehr reagiert hat. Falls das in diesem Fall noch geht, ist die einfachste Methode dann tatächlich die Task zu beenden. Es gab aber auch einige Fälle, wo auch das nicht mehr funktionierte und ich das Handy aus- und wieder einschalten mußte. Offenbar kommt also in der Speicher- und Programmverwaltung schon mal was durcheinander. Daher empfiehlt z.B. auch der Autor Timo Stoppacher in seinen Android Tipps die Verwendung eines Task Managers (siehe Literaturhinweise: Buch „Android Tipps“, Seite 127).
Einen einfachen Task-Manager habe ich bereits bei meinem Samsung Galaxy Gio an Bord. Er zeigt mir im ersten Reiter die Aktiven Anwendungen und bietet mir die Möglichkeit an, sie einzeln zu beenden. Außerdem habe ich noch im Reiter RAM, ein sogenanntes RAM-Management. Mit diesem kann ich den gesamten Speicher zurücksetzen, was aber offenbar mit Risiken verbunden ist. Möglicherweise nützlich ist auch, dass ich auf dem Homescreen ein widget platzieren kann. Mit diesem sehe ich auf einen Blick, wieviele Tasks bzw. Programm gerade im Hintergrund noch aktiv sind.

Advanced Task Killer kann auch interne Prozesse beenden
Etwas mehr Möglichkeiten bietet der Advanced Task Killer, den ich aus dem Android Market herunterladen kann. Neben dem zwangsweisen Beenden von normalen Programmen kann ich damit auch sogenannte Services stoppen. Offensichtlich ist damit das gleiche gemeint wie auch sonst bei Computern und Windows oder Unix: Programme, die Hintergrund laufen und dort bestimmte Dienste erfüllen. Wenn man solche Services abschießt, passiert im günstigsten Fall gar nichts. Im ungünstigsten Fall tut der Computer bzw. das Handy gar nichts mehr – bis zum nächsten Einschalten. Es ist also auf jeden Fall eine heikle Sache Programme auf die harte Tour zu beenden.
Die gleiche Möglichkeit bietet mir auch die bereits besprochene App Android System Info. Dort finde ich einen Reiter Tasks, der mir sogar noch detailierte Informationen liefert, sowie die Möglichkeit entweder zu der Task zu switchen oder sie zu beenden.
Somit habe ich nun wirklich genug Möglichkeiten einzugreifen und die Folgen zu überwachen. Probieren wir das also mal praktisch aus. Ich werde eine ganze Reihe von Apps nacheinander starten und laufen lassen. Und dann versuche ich verschiedene Szenarien – wie z.B. Apps laufen lassen, Apps killen, einfach abwarten – und beobachte dabei wie sich das auf die Performance auswirkt.

Das Laden der Anwendungsliste braucht Zeit
Nur wie messe ich die Performance? Ich könnte mir natürlich jetzt irgendein 3D Spiel aus dem Market herunterladen. Nur verbringe ich dann ziemlich viel Zeit damit erstmal das Spiel zu testen. Und außerdem hat die Ablaufgeschwindigkeit womöglich gar nichts mit dem Speicher zu tun, sondern eher mit der – vielleicht zu schwachbrüstigen – CPU meines Mittelklasse-Geräts. Ich überlege, wo ich denn schon mal real genervt war. Das ist meistens der Fall, wenn man drückt, eine Reaktion erwartet und längere Zeit nichts passiert. Nun fällt mir auch etwas ein. Wenn ich auf dem Homescreen ein neues Programm hinzufügen will, tue ich dies durch langes Drücken auf eine leere Stelle. Es erscheint relativ schnell ein erstes Fenster, das mir u.a. Schnellzugriffe anbietet. Drücke ich dies, dauert es schon etwas und dann bekomme ich wieder eine Auswahl u.a. mit Anwendungen. Nachdem ich dies gedrückt habe, dauert es nun wirklich immer einige Sekunden, manchmal fast eine Minute. Offenbar müssen hier erstmal alle meine Programme aufgelistet werden.Bemerkenswert ist, dass bei einem weiteren Drücken deutlich schneller geht – offenbar wird die zusammengesuchte Information zwischengespeichert. Diese Zeitspanne kann ich ja mal als reproduzierbaren Maßstab nehmen, wieviel mein Gerät gerade im Moment an Resourcen frei hat. Messen kann ich sie mit der eingebauten Stoppuhr meiner Armbanduhr – heutzutage habe ich ja immer alle möglichen Werkzeuge dabei. Zusätzlich werde ich dann noch mir den freien RAM Speicher vorher und nachher notieren – mit der schon bewährten App Android System Info.
Ferner muss ich beachten, dass ich immer unter den gleichen Bedingungen messe. Vor jeder Testrunde werde ich daher das Gerät neu starten und zwar auf die harte Tour einschließlich kurzzeitigem Entfernen des Akku. WLAN und GPS schalte ich am besten auch aus, weil hier ja je nach Aktivität und Empfangsstärke das Handy unterschiedlich belastet sein könnte.
Vielleicht erscheinen diese Vorbereitungen und Überlegungen manchen zu aufwendig für einen schlichten Test. Aber wenn ich eins gelernt habe in meiner Arbeit als Ingenieur, dann das, dass man sich sehr gut überlegen muss, was man wie messen will, wenn man ein Experiment macht. Wer misst misst Mist trifft nicht zufällig oft den Punkt. Und oft gehen bei ernsthaften Experimenten mehrere Testrunden nur dafür drauf, Fehler im Testaufbau und der Herangehensweise zu korrigieren.
Trotz meiner Vorbereitung läuft das Experiment dann aber ganz anders als erwartet. Bevor ich den eigentlichen Test mit einer Anzahl gestarteter Apps durchführe, versuche ich zunächst eine Nulllinie bzw. die Schwankungsbreite zu bestimmen. Ich messe also Zeit und Speicher ohne dass ich irgendwelche Apps (außer dem Mess-App Android System Info) gestartet habe. Das Ergebnis von mehreren Durchläufen ist folgendes:
Speicher frei (von 277 MB) – Dauer bis die Liste der Anwendungen erscheint
79 MB frei – 37s
84 MB frei – 38s
117 MB frei – 32s
88 MB frei – 31s
106 MB frei – 26s
93 MB frei – 23s
112 MB – – 28s
Alle diese Ergebnisse habe ich wie gesagt unter möglichst gleichen Bedingungen jeweils nach einem vollständigen Neustart des Geräts bekommen. Dennoch ist die Schwankungsbreite sowohl beim freien RAM Speicher als auch bei der Wartezeit enorm. Auch ein direkter Zusammenhang zwischen Speicher und Zeit ist nicht erkennbar. Unter diesen Bedingungen wird es schwierig irgendwelche signifikanten Unterschiede in Abhängigkeit von den im Hintergrund laufenden Apps zu bekommen.
Ich starte also nun nacheinander mehrere Apps. Dabei stelle ich fest, dass bis zu 4 Apps im Speicher bleiben. Lade ich die fünfte bleibt die Anzahl der aktiven Apps laut Anzeige des Taskmanagers dennoch bei 4 oder geht sogar auf 3 runter. Offenbar wird dort bereits mindestens eine rausgeworfen. (Diese Anzahl hängt natürlich auch von der Größe der Apps ab). Es gelingt mir jedenfalls kaum den Wert des freien Speichers nach unten zu treiben. Der niedrigste Wert, den ich erreiche ist 66 MB. Auch bei vier aktiven Apps lande ich meistens jedoch bei rund 80 MB. Nicht viel besser sieht es mit der benötigten Zeitdauer zum Aufruf der Anwendungsliste aus. Hier einige Werte:
80 MB – 32s
70 MB – 36s
93 MB – 31s
An dieser Stelle breche ich ab. Meine Annahme war falsch. Es gibt offenbar gar keine Auswirkung der im Hintergrund laufenden Apps auf die Zeitdauer für das Listen der Anwendungen. Auch ein Zusammenhang zwischen freiem Speicher und gefühlter Performance ist nicht erkennbar. Meine Messung bringt daher auch keine klaren Ergebnisse. Es macht keinen Sinn mehr irgendwelche Apps abzuschießen, wenn sie doch offenbar gar keinen Einfluß auf meine Meßergebnisse haben.
Dennoch ist mein kleines Experiment kein kompletter Fehlschlag. Ich weiß nun, dass die Prozesse, die im Hintergrund ablaufen, offenbar von ganz anderen Faktoren abhängen. Möglicherweise sind diese Vorgänge zu komplex, um sie mit so einem einfachen Versuchsaufbau zu erfassen. Vielleicht laufen ja noch alle paar Minuten Hintergrundroutinen ab oder der Speicher wird gelegentlich optimiert. Vielleicht hängt es auch von Zufällen ab, wie der Speicher nach dem Laden von Apps organisiert wird und wie lange die Ladezeit der Anwendungsliste dauert. Gerade beim Zugriff auf die App-Liste könnten noch ganz andere Einflüsse eine Rolle spielen wie z.B. die letzte Leseposition auf der SD Karte.
Mit dem, was ich nun gelernt habe, erscheint es mir unwahrscheinlich, dass ich mit Task-Killern und ähnlichen manuellen Eingriffen die Leistung des Geräts steigern kann. Ich glaube auch nicht, dass es in Sachen Stromverbrauch viel Unterschied macht, ob eine App noch eine Weile im Speicher hängt. Viel mehr bringt es diesbezüglich Dinge wie WLAN und GPS abzuschalten, wenn man sie gerade nicht braucht. Sinn macht das Beenden von Apps nur, wenn wirklich mal eine App hängt und ich sie anders nicht mehr neu gestartet bekomme. Aber in diesem Fall werde ich wohl oft ohnehin das ganze Gerät neu starten müssen, weil dann meist auch noch andere Anwendungen betroffen sind.