Einer der größten Vorteile von Anrdoid gegenüber dem iphone ist die Multitaskingfähigkeit. Wie auf dem PC können mehrere Programme gleichzeitig laufen und so z.B. der Instant Messenger im Hintergrund bei Jabber oder/und ICQ online sein, der Browser eine Datei runterladen und die Musik im Hintergrund spielen während man im Vordergrund eine Kurznachricht schreibt.
Aber jedes aktive Programm belegt Ressourcen,
CPU Leistung und Arbeitsspeicher sind die Kernressourcen. Android wirft bei Bedarf Programme im Hintergrund aus dem Speicher. Die Programme können dabei ihren aktuellen Zustand zwischenspeichern so dass sie genau dort weitermachen können wenn sie wieder gestartet werden. So verliert man keine entworfene Kurznachricht weil man im Vordergrund etwas Anderes, Speicherhungriges getan hat.
Damit ein Programm dann aktiv ist wenn es gebraucht wird, z.B. ein
SMS Programm wenn eine Kurznachricht eingeht, können sich die Programme für bestimmte Ereignisse registrieren zu denen sie automatisch gestartet werden. So wird bei mir
Handcent SMS gestartet beim Eintreffen einer Kurznachricht und
wenn ich den Kameraknopf drücke.
Das ist sehr praktisch, für viele Programme auch Essenziell für die Funktion, aber der Entwickler trägt dabei auch eine nicht zu unterschätzende Verantwortung:
Er muss sicherstellen, dass sich sein Programm wieder beendet wenn es nicht gebraucht wird!
Das Programm
Autostarts zeigt an welches Programm wann gestartet wird. Mit root Zugriff kann man das Verhalten auch beeinflussen.
Relativ unproblematisch, weil in der Regel ordentlich programmiert, sind der Haufen Programme die “nach dem Start” automatisch aktiv werden:
Klick für nichtgestauchte Version
Wie man sieht habe ich nur zwei Programme deaktiviert (die durchgestrichenen) weil sie auch 10 Minuten nach dem Start noch aktiv waren ohne vor dem Abschalten aktiv gewesen zu sein und von daher keinen Grund haben weiter Aktiv zu sein.
Es ist recht normal dass sich fast jedes Programm beim Start des Telefons einmal starten lässt um zu sehen ob es beim Abschalten bei etwas unterbrochen wurde das wieder aufgenommen werden muss.
Die Allermeisten Programme beenden sich dann auch gleich wieder. Ich prüfen das regelmässig indem ich kontrolliere welches Programm 5-10 Minuten nach dem Einschalten noch im Speicher ist. Auch wenn es nicht Aktiv ist und keine
CPU Zeit verbraucht belegt es Speicher. Und ich habe keine Kontrolle darüber ob es wirklich statt einem Programm das zwar im Hintergrund ist aber ich noch nutzen will aus dem Speicher fliegt.
Wie gesagt, dieser Autostart ist normal und Problemlos. Nur 3 der 32 Programme die auf meinem Gerät automatisch beim Start gestartet werden benehmen sich daneben.
Dann gibt es die Programme, die es “zu gut” meinen: sie lassen sich starten weil sie wahrscheinlich gleich gebraucht werden.
Nachtrag: Dieser Abschnitt bzw. Beispiel ist nicht ganz korrekt,
Mirko erklärt in den Kommentaren die Details
Der
MortPlayer lässt sich z.B. starten wenn ein Kopfhörer eingesteckt wird. Die Idee ist gut, denn mit großer Wahrscheinlichkeit will ich wirklich Musik hören.

Allerdings lässt sich kein anderer Player den ich installiert habe bei der Gelegenheit automatisch starten und der
MortPlayer stellt sich selbst ein Bein bzw. zeigt warum er es
nicht tun sollte. Denn den Player gibt es in zwei Varianten: zum einen einen Verzeichnisorientierten
Musikplayer, zum anderen einen
Player für Hörbücher der einige darauf angepasste Optionen hat wie Lesezeichen mitten in einem Track. Das Problem:
beide lassen sich automatisch starten! Ich will Musik hören und der Hörbuchplayer belegt im Hintergrund Ressourcen. Oder umgekehrt. Oder ich will gar keinen von Beiden benutzen.
Gut gedacht, schlecht gemacht. Der Start des Player dauert auch nur 2 Sekunden wenn er nicht im Speicher ist, es ist gar nicht nötig vorher in Habachtstellung zu gehen.
Und dann gibt es Programme deren Autostartregistrierung ich als Böswillig bezeichnen möchte.
Man betrachte sich folgende Liste:
Warum lassen sich
NewsRob (RSS-Reader),
ChoiceDialer (Sprachbefehle) und
TuneWiki (Musikplayer) automatisch starten wenn eine Anwendung
installiert wurde? Warum lässt sich Amazons MP3-Downloads Anwendung automatisch starten wenn ich eine Anwendung
aktualisiere?
Beim Systemstart klappt es schon gut, da beendet sich praktisch jedes Programm wenn es nicht zu tun hat. Der
MortPlayer ist ein Beispiel wie man Ressourcen verschwendet wenn man unaufmerksam ist. Damit kann ich leben.
Aber die Programme die sich bei völlig abwegigen Gelegenheiten starten lassen sind mehr als nur ein Ärgernis. Das ist Bösartig, die Ressourcen des Telefons sind kostbar! Hätte ich keinen Rootzugriff würde ich die Programme installieren, so kann ich sie an die Leine legen.
_____
Im Fall vom Kopfhörer aber z.B. schickt Android den Intent ohnehin nur an Anwendungen, die dafür eine laufende Instanz registriert haben (registerReceiver). Beim reinen Einstecken vom Kopfhörer wird also kein Programm gestartet. Es gibt noch ein paar andere vergleichbare Ereignisse.
Leider gehören aber die Headset-Knöpfe nicht dazu. Hier wird das Programm mit der höchsten Priorität (eine Zahl, die der Entwickler sich aus den Fingern ziehen muss) gestartet, und wenn das sich nicht zuständig fühlt (Einstellung, keine laufende Wiedergabe, ...) wird das mit der nächstniedrigeren Prio gestartet, usw. Wenns blöd läuft, werden da mal eben alle installierten Mediaplayer gestartet bis irgendwann Android’s Standardplayer sich zuständig fühlt. Mir wäre da eine andere Lösung auch lieber, aber wenn man die Headset-Buttons unterstützen will, bleibt einem keine Wahl…
Allerdings sollte man auch erwähnen, dass hier nicht gleich wie bei Windows üblich das gesamte Programm gestartet wird. Diese Ereignisse starten erstmal nur einen sogenannten “Broadcast Receiver”, der üblicherweise weder viel Speicher braucht noch viel Arbeit verrichtet. Erst wenn der z.B. ein Fenster öffnet oder einen Dienst startet wird richtig Speicher und CPU verbraten.
Ich habe es mit dem OS Monitor ausprobiert und der MortPlayer wird tatsächlich nicht gestartet wenn ich das Headset einstecke.
Allerdings werden beide MortPlayer zusammen mit dem Android Audioplayer (‘Musik’) gestartet wenn ich das Headset wieder ausstecke?
Wie passt das denn in das Schema?
Apropos Lücken – theoretisch kann man in den “Broadcast Receivern” abfragen, ob der Dienst läuft. Blöderweise ist die Funktion dafür (peekService) selbst in 2.0.1 noch derart buggy (liefert meist nichts zurück, selbst wenn der Dienst läuft), dass man sie nicht nutzen kann…
Allerdings sollten Anwendungen natürlich, sofern das reicht, registerReceiver() verwenden um nur dann benachrichtigt zu werden wenn sie sowieso schon laufen.
Ansonsten ist es vielleicht nicht ganz fair den Entwicklern Böswilligkeit zu unterstellen; in der Regel ist es eher gut gemeint; Newsrob z.B., so vermute ich jedenfalls, verwendet das Event um zu sehen ob das Unlock-Package für die Pro-Version installiert wurde. Die Alternative wäre das bei jedem Start zu machen (mgl. langsam), oder vom Nutzer zu verlangen dass er manuell eine Funktion aufruft.